Pandas:去重时如何创建"master"记录
Pandas: How to create a "master" record when de-duping
下面的示例 pandas 数据框 -
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
1 123 FRONT ST 2017
1 123 FRONT ST 2016
1 123 FRONT ST 2018
2 324 2nd st 2008
2 324 2nd st 2014
我的目标是对上面的数据帧进行重复数据删除,但是对于 "COLUMN1 - COLUMN3" 我想在最终结果中字段不为空的情况下保留这些值。几乎在寻找一种为每个 ID 制作 "master" 记录的方法(地址和 ID 将始终相同)。
目标结果是这样的 -
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
1 123 FRONT ST 2017 2016 2018
2 324 2nd st 2008 2014
使用groupby
+ last
或
max
or min
or sum
or first
:
df = df.groupby(['ID','ADDRESS'], as_index=False).max()
print (df)
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
0 1 123 FRONT ST 2017.0 2016.0 2018.0
1 2 324 2nd st 2008.0 2014.0 NaN
如果不需要稍后处理可以转换为object
:
df = df.groupby(['ID','ADDRESS'], as_index=False).max().astype(object)
print (df)
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
0 1 123 FRONT ST 2017 2016 2018
1 2 324 2nd st 2008 2014 NaN
df.groupby('ID').first()
Out[156]:
ADDRESS COLUMN1 COLUMN2 COLUMN3
ID
1 123FRONTST 2017.0 2016.0 2018.0
2 3242ndst 2008.0 2014.0 NaN
下面的示例 pandas 数据框 -
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
1 123 FRONT ST 2017
1 123 FRONT ST 2016
1 123 FRONT ST 2018
2 324 2nd st 2008
2 324 2nd st 2014
我的目标是对上面的数据帧进行重复数据删除,但是对于 "COLUMN1 - COLUMN3" 我想在最终结果中字段不为空的情况下保留这些值。几乎在寻找一种为每个 ID 制作 "master" 记录的方法(地址和 ID 将始终相同)。
目标结果是这样的 -
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
1 123 FRONT ST 2017 2016 2018
2 324 2nd st 2008 2014
使用groupby
+ last
或
max
or min
or sum
or first
:
df = df.groupby(['ID','ADDRESS'], as_index=False).max()
print (df)
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
0 1 123 FRONT ST 2017.0 2016.0 2018.0
1 2 324 2nd st 2008.0 2014.0 NaN
如果不需要稍后处理可以转换为object
:
df = df.groupby(['ID','ADDRESS'], as_index=False).max().astype(object)
print (df)
ID ADDRESS COLUMN1 COLUMN2 COLUMN3
0 1 123 FRONT ST 2017 2016 2018
1 2 324 2nd st 2008 2014 NaN
df.groupby('ID').first()
Out[156]:
ADDRESS COLUMN1 COLUMN2 COLUMN3
ID
1 123FRONTST 2017.0 2016.0 2018.0
2 3242ndst 2008.0 2014.0 NaN