![](/img/trans.png)
[英]Normalize column in pandas dataframe by sum of grouped values of another column
[英]Sum grouped Pandas dataframe by single column
我有一个熊猫数据框:
test=pd.DataFrame(columns=['GroupID','Sample','SampleMeta','Value'])
test.loc[0,:]='1','S1','S1_meta',1
test.loc[1,:]='1','S1','S1_meta',1
test.loc[2,:]='2','S2','S2_meta',1
我想(1)按两列(“ GroupID”和“ Sample”)分组,(2)每个组的“值”总和,(3)每个组的“ SampleMeta”中仅保留唯一值。 显示了所需的结果(“ GroupID”和“ Sample”作为索引):
SampleMeta Value
GroupID Sample
1 S1 S1_meta 2
2 S2 S2_meta 1
df.groupby()和.sum()方法很接近,但是.sum()在组内的“值”列中连接相同的值。 结果,“ S1_meta”值被复制。
g=test.groupby(['GroupID','Sample'])
print g.sum()
SampleMeta Value
GroupID Sample
1 S1 S1_metaS1_meta 2
2 S2 S2_meta 1
有没有一种方法可以使用groupby()和相关方法来达到预期的结果? 将每个组的总“值”与单独的“ SampleMeta” DataFrame合并是可行的,但是必须有一个更优雅的解决方案。
好吧,您可以将SampleMeta
包含在groupby中:
print test.groupby(['GroupID','Sample','SampleMeta']).sum()
Value
GroupID Sample SampleMeta
1 S1 S1_meta 2
2 S2 S2_meta 1
如果不想在完成SampleMeta
作为索引的一部分,则可以按以下方式进行修改:
print test.groupby(['GroupID','Sample','SampleMeta']).sum().reset_index(level=2)
SampleMeta Value
GroupID Sample
1 S1 S1_meta 2
2 S2 S2_meta 1
这仅在SampleMeta
中['GroupID','Sample']
没有变化的情况下才有效。 当然,如果['GroupID','Sample']
存在差异['GroupID','Sample']
则您可能会完全从groupby / sum中排除SampleMeta
:
print test.groupby(['GroupID','Sample'])['Value'].sum()
GroupID Sample
1 S1 2
2 S2 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.