合并两个数据框而不重复熊猫

Posted

技术标签:

【中文标题】合并两个数据框而不重复熊猫【英文标题】:merge two dataframes without repeats pandas 【发布时间】:2017-11-13 01:11:00 【问题描述】:

我正在尝试合并两个数据框,一个包含列:customerId、全名和电子邮件,另一个数据框包含列:customerId、金额和日期。我想让第一个数据框成为主数据框,并包含其他数据框信息,但前提是客户 ID 匹配;我试着做:

 merge = pd.merge(df, df2, on='customerId', how='left')

但是生成的数据框包含很多重复并且看起来不对:

customerId  full name   emails  amount  date
0   002963338   Star shine  star.shine@cdw.com  $2,910.94   2016-06-14
1   002963338   Star shine  star.shine@cdw.com  $9,067.70   2016-05-27
2   002963338   Star shine  star.shine@cdw.com  $6,507.24   2016-04-12
3   002963338   Star shine  star.shine@cdw.com  $1,457.99   2016-02-24
4   986423367   palm tree   tree.palm@snapchat.com,tree@.com    $4,604.83   2016-07-16

这不可能,请帮忙!

【问题讨论】:

【参考方案1】:

customerId 列中有重复项存在问题。

所以解决方案是删除它们,例如drop_duplicates:

df2 = df2.drop_duplicates('customerId')

示例:

df = pd.DataFrame('customerId':[1,2,1,1,2], 'full name':list('abcde'))
print (df)
   customerId full name
0           1         a
1           2         b
2           1         c
3           1         d
4           2         e

df2 = pd.DataFrame('customerId':[1,2,1,2,1,1], 'full name':list('ABCDEF'))
print (df2)
   customerId full name
0           1         A
1           2         B
2           1         C
3           2         D
4           1         E
5           1         F

merge = pd.merge(df, df2, on='customerId', how='left')
print (merge)
    customerId full name_x full name_y
0            1           a           A
1            1           a           C
2            1           a           E
3            1           a           F
4            2           b           B
5            2           b           D
6            1           c           A
7            1           c           C
8            1           c           E
9            1           c           F
10           1           d           A
11           1           d           C
12           1           d           E
13           1           d           F
14           2           e           B
15           2           e           D

df2 = df2.drop_duplicates('customerId')
merge = pd.merge(df, df2, on='customerId', how='left')
print (merge)
   customerId full name_x full name_y
0           1           a           A
1           2           b           B
2           1           c           A
3           1           d           A
4           2           e           B

【讨论】:

【参考方案2】:

我没有看到整行重复,但 customerId 中有重复。您可以使用以下方法删除它们:

    df.drop_duplicates('customerId', inplace = 1) 

其中 df 可以是对应于数量或一个获得的合并后的数据帧。如果你想要更少的行(比如 n),你可以使用:

    df.groupby('customerId).head(n)

【讨论】:

以上是关于合并两个数据框而不重复熊猫的主要内容,如果未能解决你的问题,请参考以下文章

Python Streamlit - 过滤熊猫数据框而不重新运行整个脚本

如何合并两个熊猫数据框[重复]

合并一个值在另外两个之间的熊猫数据框[重复]

具有两个以上数据框的熊猫的外部合并[重复]

当两个数据框都包含重复键时,如何将两个熊猫数据框与左连接合并?

数据框合并在熊猫(0.7.3)中创建重复记录