python - 合并来自python中重复记录的信息

标签 python pandas duplicates

给出这个数据示例,我想通过一列的合并信息而不是删除行来对行进行重复数据删除。在本例中是字段 CODE。

df = pd.DataFrame({'CODE':['000', '111','111','222','222', '333'],'NAME':['help','foo','bar', 'bla','booo','nyaa']  ,'ALT_NAME':['zzz','foo 1','bar', 'bl','bo','rrr'] })
print(df)

输出:

    ALT_NAME    CODE    NAME
0   zzz         000     help
1   foo 1       111     foo
2   bar         111     bar
3   bl          222     bla
4   bo          222     booo
5   rrr         333     nyaa

结果是:

    ALT_NAME        CODE            NAME
0   zzz             000             help
1   [foo 1, bar]    [111,111]       [foo,bar]
2   [bl,bo]         [222,222]       [bla,boo]
3   rrr             333             nyaa

我接近解决方案但我无法达到它:

线索:

df.groupby('CODE')['ALT_NAME','NAME'].apply(list).reset_index()

但这不适用于多个列

最佳答案

使用:

df = pd.DataFrame({'CODE':['000', '111','111','222','222', '333'],'NAME':['help','foo','bar', 'bla','booo','nyaa']  ,'ALT_NAME':['zzz','foo 1','bar', 'bl','bo','rrr'] })
print (df)

输出:

  ALT_NAME CODE  NAME
0      zzz  000  help
1    foo 1  111   foo
2      bar  111   bar
3       bl  222   bla
4       bo  222  booo
5      rrr  333  nyaa

在我看来,更好的做法是创建包含所有值的列表 DataFrameGroupBy.agg但首先使用 reset_index 按列创建 index :

df1 = (df.set_index('CODE', drop=False)
         .rename_axis(None)
         .groupby('CODE')
         .agg(list)
         .reset_index(drop=True))
print (df1)

输出:

       ALT_NAME         NAME
0           zzz         help
1  [foo 1, bar]   [foo, bar]
2      [bl, bo]  [bla, booo]
3           rrr         nyaa

但如果需要它添加 if-else 到 lambda 函数:

df1 = (df.set_index('CODE', drop=False)
         .rename_axis(None)
         .groupby(level=0)
         .agg(lambda x: list(x) if len(x) > 1 else x)
         .reset_index(drop=True))
print (df1)

输出:

       ALT_NAME        CODE         NAME
0           zzz         000         help
1  [foo 1, bar]  [111, 111]   [foo, bar]
2      [bl, bo]  [222, 222]  [bla, booo]
3           rrr         333         nyaa

关于python - 合并来自python中重复记录的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51513259/

相关文章:

python - 从列表中删除开头相同的相似项目

python - PIL 绘制图像然后在 wxpython 中显示它

python - 如何使用 Pandas 获取一列中的唯一值,同时对另一列中的某些值求和?

java - 如何从 ArrayList 中删除重复的元素?

mysql - INSERT ... ON DUPLICATE KEY UPDATE 行 IF date_add > VALUES(date_add)

python - 如何将 gRPC Python 插件与 Docker 和 Google Cloud Builds 一起使用?

python - 断言异常消息?

python - Pandas :扩展重采样窗口

python - SQLite 查询性能、Transpose、Melt 和 Pandas

rust - 这两种为 Rust channel 克隆发送者的方式有什么区别?