python - 获取一组中多个分组的 pandas.DataFrame 聚合中每个子组的计数

标签 python pandas

我有一个包含两列“A”和“B”的 DataFrame。

   A          B   
0  foo      one 
1  bar      one 
2  foo      two 
3  bar      one
4  foo      two 
5  bar      two 
6  foo      one 
7  foo      one
8  xyz      one

对于“A”中的每个组,我试图获取“B”的每个值的计数,即 B 的每个子组,但在“A”的分组上聚合。

结果应如下所示:

   A          B   countOne  countTwo
0  foo      one          3         2
1  bar      one          2         1
2  foo      two          3         2
3  bar      one          2         1
4  foo      two          3         2
5  bar      two          2         1
6  foo      one          3         2
7  foo      one          3         2
8  xyz      one          1         0

我尝试了几种方法都无济于事,目前我使用的是这种方法:

A_grouped = df.groupby(['A', 'B'])['A'].count()
A_grouped_ones = A_grouped[:,'one']
A_grouped_twos = A_grouped[:,'two']
df['countOne'] = df['A'].map(lambda a: A_grouped_ones[a] if a in A_grouped_ones else 0)
df['countTwo'] = df['A'].map(lambda a: A_grouped_twos[a] if a in A_grouped_twos else 0)

但是,这对我来说似乎效率极低。有更好的解决办法吗?

最佳答案

您可以使用unstackadd_prefix对于新的 DataFramejoin原文:

df1 = df.groupby(['A', 'B'])['A'].count().unstack(fill_value=0).add_prefix('count_')
print (df1)
B    count_one  count_two
A                        
bar          2          1
foo          3          2
xyz          1          0

df = df.join(df1, on='A')
print (df)
     A    B  count_one  count_two
0  foo  one          3          2
1  bar  one          2          1
2  foo  two          3          2
3  bar  one          2          1
4  foo  two          3          2
5  bar  two          2          1
6  foo  one          3          2
7  foo  one          3          2
8  xyz  one          1          0

另一种选择是使用size:

df1 = df.groupby(['A', 'B']).size().unstack(fill_value=0).add_prefix('count_')

差异是 size包括 NaN 值,count不 - 检查this answer .

关于python - 获取一组中多个分组的 pandas.DataFrame 聚合中每个子组的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344087/

相关文章:

python - 字典的字节列表转换为DataFrame

python - 如何将 Pandas 数据拆分为对象中的 2 位小数

python - 周日日期插补

python - 如果一个值是 NaN,Pandas 用 NaN 替换一行中的所有项目

python - 将一维点列表转换为二维 np 数组

python - 为多个 OS X 版本构建二进制 python 发行版

pandas to_parquet 在大型数据集上失败

python - 从 Pandas DataFrame 在 Netezza 上创建临时表

python - 在 python 程序中通过 ctypes 使用具有线程本地存储的共享库时发生内存泄漏

python - 如何获取 Pandas DataFrame 中的值索引?