如何使用熊猫将多行组合成具有多条件的行[关闭]

Posted

技术标签:

【中文标题】如何使用熊猫将多行组合成具有多条件的行[关闭]【英文标题】:How to combine multirow into a row with multi-condition using pandas [closed] 【发布时间】:2021-11-13 07:15:09 【问题描述】:

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

当前数据:

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

【问题讨论】:

你需要给我们一个最小的、可运行的例子,包括你所有的 Python 代码。 你写了“如果电子邮件和电话是一样的”,但你的输出似乎是“电子邮件电话”。跨度> 【参考方案1】:

您可以在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

【讨论】:

@TienVu。它能解决你的问题吗? 谢谢@Corralien。它适用于我的代码

以上是关于如何使用熊猫将多行组合成具有多条件的行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何用熊猫将多行组合成一行[重复]

如何将具有一对多关系的表组合成 1 行记录

如何将具有多个标题行的csv文件读入熊猫? [关闭]

在熊猫中将两个系列组合成一个DataFrame

使用 Pandas:如何根据一个公共键将多行数据组合成一行?

如何将两个字符串变量组合成一个多行变量?