python pandas groupby() 结果
Posted
技术标签:
【中文标题】python pandas groupby() 结果【英文标题】:python pandas groupby() result 【发布时间】:2013-07-14 00:23:10 【问题描述】:我有以下 python pandas 数据框:
df = pd.DataFrame(
'A': [1,1,1,1,2,2,2,3,3,4,4,4],
'B': [5,5,6,7,5,6,6,7,7,6,7,7],
'C': [1,1,1,1,1,1,1,1,1,1,1,1]
);
df
A B C
0 1 5 1
1 1 5 1
2 1 6 1
3 1 7 1
4 2 5 1
5 2 6 1
6 2 6 1
7 3 7 1
8 3 7 1
9 4 6 1
10 4 7 1
11 4 7 1
我想要另一列存储固定(两者)A 和 B 的 C 值的总和值。也就是说,类似于:
A B C D
0 1 5 1 2
1 1 5 1 2
2 1 6 1 1
3 1 7 1 1
4 2 5 1 1
5 2 6 1 2
6 2 6 1 2
7 3 7 1 2
8 3 7 1 2
9 4 6 1 1
10 4 7 1 2
11 4 7 1 2
我已经尝试过使用 pandas groupby
并且它确实有效:
res =
for a, group_by_A in df.groupby('A'):
group_by_B = group_by_A.groupby('B', as_index = False)
res[a] = group_by_B['C'].sum()
但我不知道如何以有序的方式将结果从res
“获取”到df
。对此有任何建议都会非常高兴。谢谢你。
【问题讨论】:
D列计算什么? 【参考方案1】:这是一种方法(虽然感觉这应该与应用一起使用,但我无法获得它)。
In [11]: g = df.groupby(['A', 'B'])
In [12]: df1 = df.set_index(['A', 'B'])
size
groupby 函数是你想要的,我们必须将它匹配到'A'和'B'作为索引:
In [13]: df1['D'] = g.size() # unfortunately this doesn't play nice with as_index=False
# Same would work with g['C'].sum()
In [14]: df1.reset_index()
Out[14]:
A B C D
0 1 5 1 2
1 1 5 1 2
2 1 6 1 1
3 1 7 1 1
4 2 5 1 1
5 2 6 1 2
6 2 6 1 2
7 3 7 1 2
8 3 7 1 2
9 4 6 1 1
10 4 7 1 2
11 4 7 1 2
【讨论】:
谢谢@Andy Hayden!我认为sum
的解决方案更通用。事实上,我在C
中没有1
(当size
完美运行时,正如您在解决方案中指出的那样)而是一些浮点数,所以为了使其正常工作,我需要使用@ 987654329@。但无论如何,太棒了,再次感谢你。
我认为您梦寐以求的单行代码是df['D'] = df.groupby(['A', 'B']).transform(np.size)
。无论好坏,transform
都在那里。 :-D
@DanAllan,D 列是如何计算的?【参考方案2】:
您还可以使用应用于 groupby 的变换来做一个单行:
df['D'] = df.groupby(['A','B'])['C'].transform('sum')
【讨论】:
【参考方案3】:你也可以使用合并来做一个单行,如下所示:
df = df.merge(pd.DataFrame('D':df.groupby(['A', 'B'])['C'].size()), left_on=['A', 'B'], right_index=True)
【讨论】:
【参考方案4】:你可以使用这个方法:
columns = ['col1','col2',...]
df.groupby('col')[columns].sum()
如果您愿意,还可以在.sum()
之后使用.sort_values(by = 'colx', ascending = True/False)
按特定列 (colx) 以升序或降序对最终输出进行排序。
【讨论】:
以上是关于python pandas groupby() 结果的主要内容,如果未能解决你的问题,请参考以下文章
python [groupby]示例groupby #pandas #secret
[Python Cookbook] Pandas Groupby
如果在 groupby 中出现条件,则 Python (Pandas)