如何获取组内 Pandas DataFrame 列中的值计数?

How to get a count of values in a Pandas DataFrame column within groups?

我有一个结构如下的 DataFrame:

df = pd.DataFrame({
        'id': ['123', '123', '123', '456', '456', '789'],
        'type': ['A', 'A', 'B', 'B', 'C', 'A']
     })
id type
123 A
123 A
123 B
456 B
456 C
789 A

如何获取按 id 分组的每种类型的计数,并为每种唯一类型创建一个新列?

我正在寻找的结果 DataFrame 如下所示:

df = pd.DataFrame({
        'id': ['123', '456', '789'],
        'A': [2, 0, 1],
        'B': [1, 1, 0],
        'C': [0, 1, 0]
    })
id A B C
123 2 1 0
456 0 1 1
789 1 0 0

感谢您的帮助和指导。

您可以使用 pd.apply 为每一列使用函数。 例如,如果你想计算“c”列的值,你可以这样做:

New_column = df["C"].apply(count)

New_column 是一系列“c”列计数。

你可以这样做:

out = df.groupby(['id','type']).size().unstack().fillna(0).astype(int).rename_axis([None])

或如@Quang Hoang 所建议的那样,简单地如

out = pd.crosstab(df['id'], df['type']).rename_axis([None])

输出:

type  A  B  C
123   2  1  0
456   0  1  1
789   1  0  0

另一种聚合方式:

df.groupby(['id', 'type']).agg(count=('type', len)).reset_index().pivot(index='id', columns='type', values='count').fillna(0)

type    A   B   C
id          
123 2.0 1.0 0.0
456 0.0 1.0 1.0
789 1.0 0.0 0.0