1 回答
TA贡献1836条经验 获得超5个赞
我会使用“拆分-应用-组合”的方法。在 pandas 中,您可以使用该groupby函数来执行此操作,然后应用一个函数将电子邮件地址组合到每个组中(在这种情况下,您可以按 col 进行分组)ID。
我编写了一个函数来组合给定列的电子邮件地址:
def combine_emails(series):
strs = [s for s in series.astype(str).values if '@' in s]
combined_emails = ",".join(strs)
if combined_emails !='':
return combined_emails
else:
return np.nan
然后,我编写了一个函数来获取每个分组数据帧的第一行,并调用电子邮件列上的组合函数来填充行电子邮件值:
def combine_duplicate_rows(df):
first_row = df.iloc[0]
for email_col in ['Store1_Email', 'Store2_Email', 'Store3_Email', 'Store4_Email']:
first_row[email_col] = combine_emails(df[email_col])
return first_row
然后您可以将其应用combine_duplicate_rows到您的组中并获得解决方案:
In [71]: df.groupby('ID').apply(combine_duplicate_rows)
Out[71]:
ID Header 1 Header 2 Header 3 Header 4 Header 5 Store1_Email Header 9 Store2_Email Header 12 Store3_Email Header 17 Store4_Email
ID
1 1 AA NaN NaN NaN NaN Email@company1.com NaN NaN NaN NaN NaN Email2@company2.com
2 2 BB NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 3 CC NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 4 DD NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
5 5 EE NaN NaN NaN NaN Email@company2.com,Email@company2.com NaN NaN NaN NaN NaN NaN
6 6 FF NaN NaN NaN NaN Email@company3.com,Email@company3.com NaN NaN NaN NaN NaN NaN
7 7 GG NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
8 8 HH NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
9 9 II NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN Email2@company3.com
10 10 JJ NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
11 11 KK NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN Email2@company4.com
12 12 LL NaN NaN NaN NaN Email@company4.com,Email@company4.com NaN NaN NaN NaN NaN NaN
13 13 MM NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
14 14 NN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
然后你就会有一个重复的ID列,但你可以删除它
del df['ID']
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报