如何获取组内 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
我有一个结构如下的 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