gpt4 book ai didi

python - Pandas |合并具有相同 ID 的行

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:09 26 4
gpt4 key购买 nike

这是示例数据集

id         firstname    lastname      email               update date
A1 wendy smith ws@mail.com 2018-01-02
A1 wendy smith smith@mail.com 2019-02-03
A2 harry lynn lynn@mail.com 2016-04-03
A2 harry harylynn@mail.com 2019-03-12
A3 tinna dickey tinna@mail.com 2016-04-03
A3 tinna dickey tinna@mail.com 2013-06-12
A4 Tom Lee Tom@mail.com 2012-06-12
A5 Ella Ella@mail.com 2019-07-12
A6 Ben Lang Ben@mail.com 2019-03-12

我已经按id更新日期对数据集进行了排序,我想合并具有相同id的行,如果其中一行空值,用相同的 id 填充另一个,如果符合,使用最新的。对于没有重复 id 的行,保留空单元格。

输出应该是:

id         firstname    lastname      email               update date
A1 wendy smith smith@mail.com 2019-02-03
A2 harry lynn harylynn@mail.com 2019-03-12
A3 tinna dickey tinna@mail.com 2019-03-12
A4 Tom Lee Tom@mail.com 2012-06-12
A5 Ella Ella@mail.com 2019-07-12
A6 Ben Lang Ben@mail.com 2019-03-12

我的尝试是使用 ffill() 合并空行并保留最后一个副本,但结果似乎影响了其他应该有空值的单元格(比如 A5 中的 lastname 应该是空的)。

df=df.ffill().drop_duplicates('id',keep='last')

最佳答案

使用GroupBy.ffill仅转发同一组的填充。然后使用 drop_duplicates :

df['lastname'] = df.groupby('id')['lastname'].ffill()
df = df.drop_duplicates('id', keep='last')

或者在一行中(但在我看来可读性较差),使用 assign :

df.assign(lastname=df.groupby('id')['lastname'].ffill()).drop_duplicates('id', keep='last')

输出

   id firstname lastname              email update date
1 A1 wendy smith smith@mail.com 2019-02-03
3 A2 harry lynn harylynn@mail.com 2019-03-12
5 A3 tinna dickey tinna@mail.com 2013-06-12
6 A4 Tom Lee Tom@mail.com 2012-06-12
7 A5 Ella NaN Ella@mail.com 2019-07-12
8 A6 Ben Lang Ben@mail.com 2019-03-12

关于python - Pandas |合并具有相同 ID 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58218387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com