我的问题是对熊猫进行分组操作。我有以下DataFrame:
In [4]: df = pd.DataFrame({"A": range(4), "B": ["PO", "PO", "PA", "PA"], "C": ["Est", "Est", "West", "West"]})
In [5]: df
Out[5]:
A B C
0 0 PO Est
1 1 PO Est
2 2 PA West
3 3 PA West
这就是我想做的事情:我想按B列分组,并对A列进行求和。但是最后,我希望C列仍在DataFrame中。如果我做 :
In [8]: df.groupby(by="B").aggregate(pd.np.sum)
Out[8]:
A
B
PA 5
PO 1
它完成了工作,但C列丢失了。我也可以这样做:
In [9]: df.groupby(by=["B", "C"]).aggregate(pd.np.sum)
Out[9]:
A
B C
PA West 5
PO Est 1
要么
In [11]: df.groupby(by=["B", "C"], as_index=False).aggregate(pd.np.sum)
Out[11]:
B C A
0 PA West 5
1 PO Est 1
但是在两种情况下,它都按B AND C分组,而不仅是B,并且保持C值。我想做什么无关紧要,还是有办法做到?
尝试结合使用DataFrameGroupBy.agg()方法dict of {column -> function}
:
In [6]: df.groupby('B').agg({'A':'sum', 'C':'first'})
Out[6]:
C A
B
PA West 5
PO Est 1
从文档:
用于汇总组的功能。如果是函数,则必须在传递DataFrame或传递给DataFrame.apply时起作用。如果传递了dict,则键必须是DataFrame列名。
或类似这样的东西取决于您的目标:
In [8]: df = pd.DataFrame({"A": range(4), "B": ["PO", "PO", "PA", "PA"], "C": ["Est1", "Est2", "West1", "West2"]})
In [9]: df.groupby('B').agg({'A':'sum', 'C':'first'})
Out[9]:
C A
B
PA West1 5
PO Est1 1
In [10]: df['sum_A'] = df.groupby('B')['A'].transform('sum')
In [11]: df
Out[11]:
A B C sum_A
0 0 PO Est1 1
1 1 PO Est2 1
2 2 PA West1 5
3 3 PA West2 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句