Pandas:如何为与查询不匹配的列中的所有项目获取 0 计数

问题描述 投票:0回答:2

我将给出一个简单的数据框作为示例:

身份证号码 年份 公司 产品
1 1984 ACME P1
2 1986 ACME P2
7 1959 ACME P7
3 1951 史密斯 P3
4 1982 科尔曼 P4
5 1987 P5
6 1960 坦纳 P6

如果我想统计 1980 年或以后的所有产品年份,将那些仅在 1980 年之前有条目的公司报告为 0,我该怎么做?

如果我过滤 YEAR >= 1980 然后尝试从中获取计数,那么我可能会得到 ACME:2、COLEMAN:1、HILL:1。

我想要的是 ACME:2、COLEMAN:1、HILL:1、SMITH:0、TANNER:0。我不想算 1980 年之前的 ACME 行

pandas
2个回答
0
投票

您可以将年份转换为布尔列,然后

groupby.sum
:

df['Year'].gt(1980).groupby(df['Company']).sum()

输出:

Company
ACME       2
COLEMAN    1
HILL       1
SMITH      0
TANNER     0
Name: Year, dtype: int64

0
投票

进行分组和求和:

import io

import pandas as pd

with io.StringIO('''ID  Year    Company     Product
1   1984    ACME    P1
2   1986    ACME    P2
7   1959    ACME    P7
3   1951    SMITH   P3
4   1982    COLEMAN     P4
5   1987    HILL    P5
6   1960    TANNER  P6
''') as f:
    df = pd.read_csv(
        f,
        delim_whitespace=True,
    ).set_index(['Company', 'ID'])

counts = (
    df['Year'] >= 1980
).groupby('Company').sum()
print(counts)
© www.soinside.com 2019 - 2024. All rights reserved.