亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

pandas,如果行包含通配符文本,則合并重復項

pandas,如果行包含通配符文本,則合并重復項

PHP
守候你守候我 2023-11-09 21:14:31
我有一個重復項的數據集 (?ID)。數據集包含信息和電子郵件。我正在嘗試連接電子郵件(如果行有字符@),然后刪除重復項。如何附加僅包含電子郵件地址的行?@我認為我可以通過使用通配符并替換這部分來 跳過附加包含字符的所有行if row['Store1_Email']: # <- not working對于任何這些嘗試,但沒有任何效果:1.if str('**@**') in row['Store1_Email']: # <- not working錯誤:Traceback (most recent call last):? File "g:/Till/till_duplicate.py", line 35, in <module>? ? if str('**@**') in row['Store1_Email']:TypeError: argument of type 'float' is not iterablePS G:\Till>錯誤:Traceback (most recent call last):? File "g:/Till/till_duplicate.py", line 35, in <module>? ? if df_merged_duplicates[df_merged_duplicates.loc[i, 'Store1_Email'].str.contains('@')]:AttributeError: 'str' object has no attribute 'str'PS G:\Till>
查看完整描述

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']


查看完整回答
反對 回復 2023-11-09
  • 1 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號