繁体   English   中英

Python Pandas 从 csv 中提取重复项并聚合列的值

[英]Python Pandas extract duplicates from a csv and aggregate the values ​of a column

我有一个 CSV 文件,由 4 列 A、B、C、D 组成。我想:

  • 查找 A、B、C 列具有相同值的所有重复项
  • 对于这些,取 D 的值并创建一个没有重复的行,其中 D 列是所有重复项的 D 列的并集

示例 CSV 输入:

John,Yes,123,street 1
John,Yes,123,street 2
Tom,No,345,street 1
Tom,No,345,street 2
Tom,No,345,street 3
Jason,Yes,567,street 1
Thomas,No,123,street 1
Jess,No,999,street 1

预期结果:

John,Yes,123,street 1 street 2
Tom,No,345,street 1 street 2 street 3
Jason,Yes,567,street 1
Thomas,No,123,street 1
Jess,No,999,street 1

df.groupby(['A','B','C'])['D'].apply(' '.join).reset_index()

完整代码:

from io import StringIO
df = """A,B,C,D
John,Yes,123,street 1
John,Yes,123,street 2
Tom,No,345,street 1
Tom,No,345,street 2
Tom,No,345,street 3
Jason,Yes,567,street 1
Thomas,No,123,street 1
Jess,No,999,street 1"""
df = pd.read_csv(StringIO(df))
df.groupby(['A','B','C'])['D'].apply(' '.join).reset_index()

Output:

一种 C
0 杰森 是的 567 街道 1
1个 杰斯 999 街道 1
2个 约翰 是的 123 街道 1 街道 2
3个 托马斯 123 街道 1
4个 汤姆 345 街道 1 街道 2 街道 3

解释:

df.groupby(['A','B','C'])['D'].apply(' '.join).reset_index()df.groupby(['A','B','C'])['D'].apply(lambda g: ' '.join(g.values)).reset_index()与这些替代方案相同:

# alternative #1
df.groupby(['A','B','C'])['D'].apply(lambda g: ' '.join(g)).reset_index()
# alternative #2
df.groupby(['A','B','C']).apply(lambda g: ' '.join(g['D'])).reset_index()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM