按索引对Pandas数据帧中两列中的重复行进行求和

时间:2017-03-17 15:07:48

标签: python pandas

我有以下数据框,从csv读入pandas。

           Fruit    Apple   Pear
Date                  
2016-03-30  Pear            1
2016-04-14  Pear            1
2016-04-14  Pear            1
2016-05-09  Apple   1
2016-05-18  Apple   1   
2016-06-24  Pear            1
2016-06-27  Apple   1   
2016-06-27  Pear            1
2016-06-28  Apple   1   
2016-06-28  Apple   1   
2016-07-05  Pear            1

我希望它看起来像这样。它将重复的行相加,然后删除重复的行。此时Fruit列中的值无关紧要。我稍后会放弃该专栏。

           Fruit    Apple   Pear
Date                  
2016-03-30  Pear            1
2016-04-14  Pear            2
2016-05-09  Apple   1
2016-05-18  Apple   1   
2016-06-24  Pear            1
2016-06-27  Apple   1       1
2016-06-28  Apple   2   
2016-06-28  Apple   1   
2016-07-05  Pear            1

我尝试使用groupby,但它用1s填充了Apple / Pear列。我尝试了一个for循环,如果下一个日期索引与当前日期索引相同,那么对于相应的Apple / Pear列,它将+ = 1。这失败了,因为列的类型,以及我尝试更改列类型也失败了。对着这一个敲我的头,我无法得到它。

我能做的一件事就是用df = df.reset_index().drop_duplicates('Date',keep='last').set_index('Date')

删除重复项

2 个答案:

答案 0 :(得分:2)

IIUC您需要groupby索引 - level=0和汇总sum

df = df.groupby(level=0).sum()
print (df)
            Apple  Pear
Date                   
2016-03-30    NaN   1.0
2016-04-14    NaN   2.0
2016-05-09    1.0   NaN
2016-05-18    1.0   NaN
2016-06-24    NaN   1.0
2016-06-27    1.0   1.0
2016-06-28    2.0   NaN
2016-07-05    NaN   1.0

如果需要提及cumsum Noobie,谢谢:

df = df.groupby(level=0).cumsum() 
print (df)
            Apple  Pear
Date                   
2016-03-30    NaN   1.0
2016-04-14    NaN   1.0
2016-04-14    NaN   2.0
2016-05-09    1.0   NaN
2016-05-18    1.0   NaN
2016-06-24    NaN   1.0
2016-06-27    1.0   NaN
2016-06-27    NaN   1.0
2016-06-28    1.0   NaN
2016-06-28    2.0   NaN
2016-07-05    NaN   1.0

答案 1 :(得分:0)

您可以简单地尝试一下

df.groupby(['Date','Fruit']).agg('sum')

我刚刚意识到这是一个重复的问题,see this