如何合并大部分重复的行

新手上路,请多包涵

我的一些数据看起来像:

 date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35

我正在努力达到可以跑步的程度

data.set_index(['date', 'name'])

但是,对于原样的数据,当然有重复项(如上所示),所以我不能这样做(而且我不想要一个有重复项的索引,我不能简单地删除_duplicates(),因为这会丢失数据)。

我希望能够强制将具有相同 [date, name] 值的行合并为一行,如果它们可以基于某些值为 NaN 的值成功收敛(类似于 combine_first() 的行为)。例如,以上将结束于

date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35

如果两个值不同并且一个不是 NaN,则这两行不应收敛(这可能是我需要跟进的错误)。

(为了扩展上面的例子,实际上可能有任意数量的行——给定任意数量的列——它们应该能够汇聚成一行。)

这感觉像是一个应该可以通过熊猫解决的问题,但我很难找到一个优雅的解决方案。

原文由 severian 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 321
2 个回答

假设您有一些函数 combine_it 给定一组具有重复值的行,返回单行。首先,按 datename

 grouped = data.groupby(['date', 'name'])

然后只需应用聚合函数和 繁荣 你就完成了:

 result = grouped.agg(combine_it)

您还可以通过传递 agg 字典为不同的列提供不同的聚合函数。

原文由 Jeff Tratner 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于您的列值不重复,因此您可以使用 agg 函数的技巧,如下所示:

 data.groupby(['date', 'name']).agg('sum')

原文由 Abu Shoeb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题