gpt4 book ai didi

python - Pandas 删除每行中部分完成数据的重复项并合并数据

转载 作者:行者123 更新时间:2023-11-28 22:25:03 25 4
gpt4 key购买 nike

我有一个包含重复 ID 的数据框,但数据在多个区域部分完成。

df = pd.DataFrame([[1234, 'Customer A', '123 Street', np.nan, np.nan],
[1234, 'Customer A', np.nan, '333 Street', np.nan],
[1234, 'Customer A', '12345 Street', np.nan, np.nan],
[1234, 'Customer A', np.nan, np.nan, np.nan],
[1233, 'Customer B', '444 Street', '3335 Street', np.nan],
[1233, 'Customer B', '555 Street', '666 Street', np.nan],
[1233, 'Customer B', '553 Street', '666 Street', 'abc@email.com'],
[1235, 'Customer C', '1553 Street', '644 Street', 'abc@email.com'],
[1235, 'Customer C', '2553 Street', '644 Street', 'abc@email.com']],
columns=['ID', 'Customer', 'Billing Address', 'Shipping Address', 'Contact'])


df
ID Customer Billing Address Shipping Address Contact
0 1234 Customer A 123 Street NaN NaN
1 1234 Customer A NaN 333 Street NaN
2 1234 Customer A 12345 Street NaN NaN
3 1234 Customer A NaN NaN NaN
4 1233 Customer B 444 Street 3335 Street NaN
5 1233 Customer B 555 Street 666 Street NaN
6 1233 Customer B 553 Street 666 Street abc@email.com
7 1235 Customer C 1553 Street 644 Street abc@email.com
8 1235 Customer C 2553 Street 644 Street abc@email.com

我想保留所有数据,以便在数据存在时创建新列,使其看起来像下面的数据框: enter image description here

我尝试了以下操作,但它删除了我想要保留的数据。

df.drop_duplicates(subset=['ID'], inplace=True)
df

ID Customer Billing Address Shipping Address Contact
0 1234 Customer A 123 Street NaN NaN
4 1233 Customer B 444 Street 3335 Street NaN
7 1235 Customer C 1553 Street 644 Street abc@email.com

编辑:我添加了更多数据,因为从原始帖子中不清楚可以有多行 ID。

最佳答案

这是使用 apply 和创建新列的一种方法,使用 dict 创建 pd.Series

In [1057]: cols = ['Billing Address', 'Shipping Address']

In [1058]: (df.groupby(['ID', 'Customer'])
.apply(lambda g: pd.Series({'%s %s' % (x, i+1): v[x]
for i, v in enumerate(g[cols].to_dict('r'))
for x in v})))
Out[1058]:
Billing Address 1 Billing Address 2 Shipping Address 1 \
ID Customer
1233 Customer B 444 Street 555 Street 333 Street
1234 Customer A 123 Street NaN NaN

Shipping Address 2
ID Customer
1233 Customer B 666 Street
1234 Customer A 333 Street

关于python - Pandas 删除每行中部分完成数据的重复项并合并数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45842932/

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