1

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

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)
包裹 水库 账单
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'])
包裹 水库 账单
001 亨利 4,100 1995
002 缺口 2,300 1990
003 保罗,比尔 5,200, 4,000 2008年

我不知道从哪里开始,但任何关于在哪里看的提示都将不胜感激。

4

1 回答 1

2

您可以.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
于 2021-04-25T20:43:04.607 回答