按单列对Pandas数据进行求和

时间:2014-05-13 22:06:57

标签: python pandas

我有一个Pandas数据帧:

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)每组的'Value',以及(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()和相关方法实现所需的结果?将每组的总和'Value'与单独的'SampleMeta'DataFrame合并,但必须有更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

好吧,您可以将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']内存在变化,那么您可能会完全从groupby / sum中排除SampleMeta

print test.groupby(['GroupID','Sample'])['Value'].sum()

GroupID  Sample
1        S1        2
2        S2        1
相关问题