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 protected] NaN NaN NaN NaN NaN [email protected]
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 protected],[email protected] NaN NaN NaN NaN NaN NaN
6 6 FF NaN NaN NaN NaN [email protected],[email protected] 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 [email protected]
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 [email protected]
12 12 LL NaN NaN NaN NaN [email protected],[email protected] 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 關注
- 143 瀏覽
添加回答
舉報