2017-08-08 120 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 –

相关问题