【问题标题】:Merge duplicate rows in a text file using python based on a key column使用基于键列的python合并文本文件中的重复行
【发布时间】:2020-11-18 17:27:02
【问题描述】:

我有一个 csv 文件,我需要根据键列 name 合并这些行的记录

a.csv

Name|Acc#|ID|Age
Suresh|2345|a-b2|24
Mahesh|234|a-vf|34
Mahesh|4554|a-bg|45
Keren|344|s-bg|45
yankie|999|z-bg|34
yankie|3453|g-bgbbg|45

预期输出:合并基于名称Maheshyankie 行中的名称类似值的记录

Name|Acc#|ID|Age
Suresh|2345|a-b2|24
Mahesh|[234,4555]|[a-vf,a-bg]|[34,45]
Keren|344|s-bg|45
yankie|[999,3453]|[z-bg,g-bgbbg]|[34,45]

有人可以在 python 中帮助我吗?

【问题讨论】:

  • 我从未见过包含数组的 csv 文件,所以一列中有多个值。只是出于好奇,什么类型的应用程序能够读取该输出文件?
  • 这与 ETL 流有关,其中一个应用程序使用来自另一个应用程序的文件中的数据

标签: python-3.x csv file merge


【解决方案1】:
import pandas as pd

df = pd.read_csv("a.csv", sep="|", dtype=str)
new_df = df.groupby('Name',as_index=False).aggregate(lambda tdf: tdf.unique().tolist() if tdf.shape[0] > 1 else tdf)
new_df.to_csv("data.csv", index=False, sep="|")

输出:

Name|Acc#|ID|Age
Keren|344|s-bg|45
Mahesh|['234', '4554']|['a-vf', 'a-bg']|['34', '45']
Suresh|2345|a-b2|24
yankie|['999', '3453']|['z-bg', 'g-bgbbg']|['34', '45']

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2013-07-01
    • 2020-01-01
    • 1970-01-01
    • 2021-10-03
    • 2020-03-10
    • 2018-07-24
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多