[英]pandas df getting the value of a column associated with the max of a groupby
我試圖通過A組合,找到B的最大值,並且最大值返回與之關聯的C.
import pandas as pd
a1 = [1,2,'x']
a2 = [1,3,'y']
a3 = [2,3,'y']
a4 = [2,4,'z']
df = pd.DataFrame([a1,a2,a3,a4], columns = ['A','B','C'])
groups = df.groupby('A')['B'].max()
df = df.join(groups, on='A', rsuffix = '_max')
df
我得到的結果是
A B C B_max
0 1 2 x 3
1 1 3 y 3
2 2 3 y 4
3 2 4 z 4
我想要的結果是
A B C B_max C_max
0 1 2 x 3 y
1 1 3 y 3 y
2 2 3 y 4 z
3 2 4 z 4 z
那么這里有幾個選項(毫無疑問還有更多)。 (1)這是一個剛上你在做什么(它抓住通過使用該C_max列皺紋idxmax
B柱):
>>> foo = lambda x: pd.Series({'B_max':x.B.max(),'C_max':x.C[x.B.idxmax()]})
>>> print df.join(df.groupby('A').apply(foo),on='A')
A B C B_max C_max
0 1 2 x 3 y
1 1 3 y 3 y
2 2 3 y 4 z
3 2 4 z 4 z
(2)或者這可能更清潔:
>>> agg = df.groupby('A').agg(lambda x: x.loc[x.B.idxmax(),:])
>>> print df.join(agg, on='A', rsuffix = '_max')
A B C B_max C_max
0 1 2 x 3 y
1 1 3 y 3 y
2 2 3 y 4 z
3 2 4 z 4 z
(3)或者你可以在groupby/apply
調用的函數中完成所有操作:
def foo(g):
g['B_max'] = g.B.max()
g['C_max'] = g.C[g.B.idxmax()]
return g
print df.groupby('A').apply(foo)
A B C B_max C_max
0 1 2 x 3 y
1 1 3 y 3 y
2 2 3 y 4 z
3 2 4 z 4 z
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.