Python Pandas - 合并大多数重复的行

sev*_*ian 12 python duplicates dataframe pandas

我的一些数据看起来像:

date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,,
1/1/2001,ABC,,,2,
1/1/2001,ABC,,,,35
Run Code Online (Sandbox Code Playgroud)

我试图达到可以运行的程度

data.set_index(['date', 'name'])
Run Code Online (Sandbox Code Playgroud)

但是,随着数据的原样,当然有重复(如上所示),所以我不能这样做(我不希望索引有重复,我不能简单地drop_duplicates(),因为这会丢失数据).

我希望能够将具有相同[日期,名称]值的行强制为单个行,如果它们可以基于某些值NaN成功收敛(类似于combine_first()的行为).例如,上述内容将最终结束

date, name, value1, value2, value3, value4
1/1/2001,ABC,1,1,2,35
Run Code Online (Sandbox Code Playgroud)

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

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

这感觉就像是一个应该通过熊猫解决的问题,但我无法找到一个优雅的解决方案.

Jef*_*ner 12

让我们假设你有一些函数combine_it,给定一组具有重复值的行,返回一行.首先,按组datename:

grouped = data.groupby(['date', 'name'])
Run Code Online (Sandbox Code Playgroud)

然后只需应用聚合功能并繁荣完成:

result = grouped.agg(combine_it)
Run Code Online (Sandbox Code Playgroud)

您还可以通过传递aggdict 为不同的列提供不同的聚合函数.