python - Pandas ,删除重复项但合并某些列

标签 python pandas

我正在寻找一种方法来删除基于特定列子集的重复行,但合并一些数据,因此它不会被删除。

import pandas as pd

# Example Dataframe
data = {
    "Parcel": ['001', '002', '003', '003'],
    "Res"   : ['Henry', 'Nick', 'Paul', 'Bill'],
    "Bill"  : ['4,100', '2,300', '5,200', '4,000'],
    "Year"  : ['1995', '1990', '2008', '2008']
}
df = pd.DataFrame.from_dict(data=data)
<表类="s-表"> <头> 包裹 分辨率 法案 年份 <正文> 001 亨利 4,100 1995 002 尼克 2,300 1990 003 保罗 5,200 2008 003 账单 4,000 2008

一些伪代码看起来像这样:

df = df.drop_duplicates(subset='Parcel', keep_data=['Res', 'Bill'])
<表类="s-表"> <头> 包裹 分辨率 法案 年份 <正文> 001 亨利 4,100 1995 002 尼克 2,300 1990 003 保罗,比尔 5,200, 4,000 2008

我不确定从哪里开始,但如果有任何关于在哪里查看的提示,我们将不胜感激。

最佳答案

您可以将 .groupby.agg 一起使用:

df = (
    df.groupby("Parcel")
    .agg({"Res": ", ".join, "Bill": ", ".join, "Year": "first"})
    .reset_index()
)
print(df)

打印:

  Parcel         Res          Bill  Year
0    001       Henry         4,100  1995
1    002        Nick         2,300  1990
2    003  Paul, Bill  5,200, 4,000  2008

编辑:如果您有很多列,您可以“首先”聚合所有值,然后更新数据框:

g = df.groupby("Parcel")
x = g.agg("first")
x.update(g.agg({"Res": ", ".join, "Bill": ", ".join}))
print(x.reset_index())

  Parcel         Res          Bill  Year
0    001       Henry         4,100  1995
1    002        Nick         2,300  1990
2    003  Paul, Bill  5,200, 4,000  2008

关于python - Pandas ,删除重复项但合并某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67258042/

相关文章:

python - 如何获取 "paster request"使用配置主机值而不是本地主机?

python - 使用 urllib2 将 solr curl updateJSON 语法转换为 python

pandas - 如何在条形图上显示值计数

python - 从 Pandas 的分组数据中获取最大的 n 个项目

python - 从 Pandas 数据框中的字符串中删除数字

python - Python 的字符串和 unicode 强制/魔术函数如何工作?

python3, ftplib storlines 错误

python - 如何在不知道索引的情况下查询 pandas 数据帧的特定值

python - 如何在 Pandas 的 groupby 对象中获取组数?

python - Pandas groupby 数据并进行计算