python - 如何合并大多数重复的行

标签 python duplicates pandas dataframe

我的一些数据看起来像:

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'])

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

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

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

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

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

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

最佳答案

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

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

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

result = grouped.agg(combine_it)

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

关于python - 如何合并大多数重复的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006476/

相关文章:

python - 合并到一个文件时文件数据会成倍增加,为什么?

python - Paypal Sandbox 和 Google App Engine 的身份验证错误

python - 为什么 `scipy.stats.rv_continuous` 的这个子类没有生成正确范围内的随机变量?

python - Mac 用 brew 安装 python3.6

windows - 列出 2 个目录中的文件并进行比较

python - 使用 Python/Pandas 索引日期作为假期列表中的条件

python - 如何获取使用模式找到的数据列表

Grails 装置插件和功能测试重复数据

python - 计算新 DataFrame 列中给定日期以来的月数

python - 使用 matplotlib 基于类别的多色条