2017-08-08 174 views
1

比方說,我有一個數據幀,看起來像這樣如何格式化數據框來看起來像這樣?

A B C 
x xy 6 
x xz 7 
x xa 12 
y ya 2 
y yb 45 
z zc 4 

我想重新組織,所以,它給我的總額,然後給了我一個內最大的,例如:

A B C D 
x 25 xa 12 
y 47 yb 45 
z 4 zc 4 

從本質上講,這是什麼做的是按組採取總計在A,並提出各類B ..它找到一個內最大的實體並提出,要與實體的D.

數量C

我怎樣才能組織一個數據幀到p改變這個功能?

回答

4

最簡單的方式把它

df.set_index('B').groupby('A').C.agg(['sum', 'idxmax', 'max']) 

    sum idxmax max 
A     
x 25  xa 12 
y 47  yb 45 
z 4  zc 4 

如果您要重命名的列可'A', 'B', 'C', 'D'

df.set_index('B').groupby('A').C.agg(['sum', 'idxmax', 'max']) \ 
    .rename(columns=dict(sum='B', idxmax='C', max='D')).reset_index() 

    A B C D 
0 x 25 xa 12 
1 y 47 yb 45 
2 z 4 zc 4 
+0

很好的解決方案,不需要reset_index()雖然獲得所需的輸出。 +1,或者這是有爭議的 –

+0

目前尚不清楚OP是否想要'A'作爲索引或列。我提供了足夠的信息供OP決定。謝謝你的稱讚。 – piRSquared

+0

謝謝@piRSquared。非常感謝+1。 – sgerbhctim

2

您可以使用:

s = df.groupby('A')['C'].sum().rename('B') 
df = df.loc[df.groupby('A')['C'].idxmax()].rename(columns={'B':'C','C':'D'}) 
df = df.join(s, on='A').sort_index(axis=1) 
print (df) 
    A B C D 
2 x 25 xa 12 
4 y 47 yb 45 
5 z 4 zc 4 
+0

我想說df.set_index 「A」),但無論如何upvote! +1 –

相關問題