我正在使用pandas汇总数据透视表中的值。
dfr = pd.DataFrame({'A': [1,1,1,1,2,2,2,2],
'B': [1,2,2,3,1,2,2,2],
'C': [1,1,1,2,1,1,2,2],
'Val':[1,1,1,1,1,1,1,1]})
dfr = dfr.pivot_table(values='Val', index=['A', 'B', 'C'], aggfunc=np.sum)
dfr
输出:
A B C |Val
------------|---
1 1 1 |1
2 1 |2
3 2 |1
2 1 1 |1
2 1 |1
2 |2
我需要输出的方式是显示每个组A中的最大值,如下所示:
A B C |Val
------------|---
1 2 1 |2
2 2 2 |2
我已经google了一下,尝试以不同的方式使用nlargest(),而无法产生我想要的结果。有人有任何想法吗?
答案 0 :(得分:3)
我认为level A
需要groupby
+ nlargest
:
dfr = dfr.pivot_table(values='Val', index=['A', 'B', 'C'], aggfunc=np.sum)
dfr = dfr.groupby(level='A')['Val'].nlargest(1).reset_index(level=0, drop=True).reset_index()
print (dfr)
A B C Val
0 1 2 1 2
1 2 2 2 2
因为如果使用pivot_table
则会丢失其他级别:
dfr = dfr.pivot_table(values='Val', index=['A', 'B', 'C'], aggfunc=np.sum).reset_index()
dfr = dfr.pivot_table(values='Val', index='A', aggfunc=lambda x: x.nlargest(1))
print (dfr)
Val
A
1 2
2 2
如果使用所有级别,它会返回所有级别的nlrgest(不是你想要的)
dfr = dfr.pivot_table(values='Val', index=['A', 'B', 'C'], aggfunc=np.sum).reset_index()
dfr = dfr.pivot_table(values='Val', index=['A', 'B', 'C'], aggfunc=lambda x: x.nlargest(1))
print (dfr)
Val
A B C
1 1 1 1
2 1 2
3 2 1
2 1 1 1
2 1 1
2 2