如何使用熊猫将多行组合成具有多条件的行[关闭]
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。它适用于我的代码以上是关于如何使用熊猫将多行组合成具有多条件的行[关闭]的主要内容,如果未能解决你的问题,请参考以下文章