如何使用pandas将多行合并为具有多个条件的行

2024-04-25 04:52:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据条件将行合并成单行。该条件基于电话和电子邮件。如果电子邮件和电话相同,则实体和帐户将合并为一行。 我找不到解决这个问题的逻辑。有什么想法吗?例如:

当前数据:

entity  phone               email account_no
   E01     22 minhkhang@gmail.com
   E02     33  hoangyen@gmail.com
   E03     55    tmai@hotmail.com
   E04     66   thuthao@gmail.com
   E05     77    lamanh@gmail.com        M05
   E06     88    tuantu@gmail.com        M06
   E07    100    maidao@gmail.com
           11 minhkhang@gmail.com        M01
           44  hoangyen@gmail.com        M02
           55  thanhmai@gmail.com        M03
           66   tthao@hotmail.com        M04
           99 hoangkien@gmail.com        M07

我想要的结果是:

entity account_no
              M07
   E02        M02
   E05        M05
   E07
   E01        M01
   E03        M03
   E04        M04
   E06        M06

Tags: nocom电子邮件account条件gmailentity电话
1条回答
网友
1楼 · 发布于 2024-04-25 04:52:28

您可以在phone列上使用merge,然后在email列上使用。合并两个新数据帧并删除重复数据帧:

phone = pd.merge(df[['entity', 'phone']].dropna(),
                 df[['account_no', 'phone']].dropna(),
                 how='outer', on='phone') \
          .drop(columns='phone')

email = pd.merge(df[['entity', 'email']].dropna(),
                 df[['account_no', 'email']].dropna(),
                 how='outer', on='email') \
          .drop(columns='email')

out = phone.combine_first(email).drop_duplicates('account_no').fillna('')

输出:

>>> out
  entity account_no
0    E01        M01
1    E02        M02
2    E03        M03
3    E04        M04
4    E05        M05
5    E06        M06
6    E07
9               M07

相关问题 更多 >