2017-03-17 41 views
1

我有以下数据框,从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')

+0

阅读[本](http://stackoverflow.com/quest离子/ 20109391 /如何使良好的可重现熊猫例子)如何问一个好的熊猫问题可能会有所帮助。您发布的帧很难解析,并且不清楚2016-03-30/Apple中的值是否为0或NaN,并且您因某种原因或空字符串等而被抑制。 – DSM

回答

1

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 
+0

'df = df.groupby(level = 0).sum()。min()。max()。cumsum()'也可以工作 –

+0

@Noobie - 谢谢你的建议,也许你觉得'df.groupby(level = 0 ).cumsum()。reset_index()。drop_duplicates('Date',keep ='last')'? – jezrael

+0

是的多数民众赞成更有效 –

相关问题