1 回答

TA貢獻(xiàn)1836條經(jīng)驗 獲得超5個贊
我會使用“拆分-應(yīng)用-組合”的方法。在 pandas 中,您可以使用該groupby函數(shù)來執(zhí)行此操作,然后應(yīng)用一個函數(shù)將電子郵件地址組合到每個組中(在這種情況下,您可以按 col 進(jìn)行分組)ID。
我編寫了一個函數(shù)來組合給定列的電子郵件地址:
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
然后,我編寫了一個函數(shù)來獲取每個分組數(shù)據(jù)幀的第一行,并調(diào)用電子郵件列上的組合函數(shù)來填充行電子郵件值:
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
然后您可以將其應(yīng)用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
然后你就會有一個重復(fù)的ID列,但你可以刪除它
del df['ID']
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報