首页 > 解决方案 > 在两个键中合并df,只为一个键工作

问题描述

所以我有两个 df,它们需要合并到两个键Channel and Week中。尝试合并时,它会为 Column Contacts_F. 中的所有行返回 NaN 值。

数据:

df = pd.DataFrame({ 'week' : ['01', '02', '45'] ,
                    'Channel' : ['AA', 'BB', 'CC'],
                    'level' : ['1degre','2degre','3degre']  })
df.dtypes
out[131]:
week               object
Channel            object
level              object



reff_table = pd.DataFrame({ 'week' : ['01', '02', '45'] ,
                            'Channel' : ['AA', 'BB', 'CC'],
                            'Contacts_F' : ['0.11','0.546','0.06458']  })
reff_table.dtypes
out[132]:
week               object
Channel            object
Contacts_F         float64



print(df.week[:3]), print(reff_table.week[:3])

0    00
1    00
2    00
Name: week, dtype: object
0    103
1    102
2    101
Name: week, dtype: object
(None, None)

我的尝试:

它为column= Contacts_F中的所有行返回NaN

/。

df = pd.merge(df, reff_table [["Channel", "week" , "Contacts_F"]],on=['Channel','week'], how='left')

如果我只合并 ON Column= Channel ,它会起作用,但我需要匹配两列。

df = pd.merge(df, reff_table [["Channel", "week" , "Contacts_F"]],on=['Channel', how='left')

标签: pythonpandasmerge

解决方案


有关如何执行合并的工作示例,请参见下文。更正了提示中的各种语法错误。

    import pandas as pd

    df = pd.DataFrame({'week': [1, 2, 45],
                       'Channel': ['AA', 'BB', 'CC'],
                       'level': ['1degre', '2degre', '3degre']})

    reff_table = pd.DataFrame({'week': [1, 2, 45],
                               'Channel': ['AA', 'BB', 'CC'],
                               'Contacts_F': ['0.11', '0.546', '0.06458']})

    pd.merge(df, reff_table, on=['Channel', 'week'], how='left')

    ------

    Out[8]:
        week Channel   level Contacts_F
     0     1      AA  1degre       0.11
     1     2      BB  2degre      0.546
     2    45      CC  3degre    0.06458



推荐阅读