[英]Python Pandas extract duplicates from a csv and aggregate the values of a column
我有一个 CSV 文件,由 4 列 A、B、C、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.