如果值在列中匹配,则组合Pandas数据框

时间:2018-02-14 01:06:09

标签: python pandas dataframe data-science

我想根据条件合并/合并2个数据框。

让我们说这是两个dfs。

df1
    name    tpye    option  store
    a       2       8       0
    b       4       9       8
    c       3       6       2
    g       3       2       7
    k       1       6       2
    m       3       6       5


df2
   name     red     green   yellow
   a        r       g       y
   b        r       g       y
   m        r       g       y   

如果df2 [' name']值存在于df1 [' name']中,我想尝试做什么,将红色,绿色列添加到final_df。

所以final_df想要

name    tpye    option  store   red     green   yellow
a       2       8       0       r       g       y
b       4       9       8       r       g       y
c       3       6       2
g       3       2       7
k       1       6       2
m       3       6       5       r       g       y

2 个答案:

答案 0 :(得分:2)

试试这个。它起作用是因为pandas可以通过索引有效地分配,特别是当索引在每个数据帧中是唯一的时。

df1 = df1.set_index('name')
df2 = df2.set_index('name')
df1[['red', 'green', 'yellow']] = df2[['red', 'green', 'yellow']]

或者,pd.merge将起作用,正如@PaulH所提到的那样:

df1.merge(df2, how='left', on='name')

答案 1 :(得分:0)

您可以使用pandas join功能。您的第一个数据帧将是您想要所有值的数据帧。例如:

import pandas as pd

d1 = pd.DataFrame({'col1': [1, 2 , 4],  'col2': [3, 4 , 5]})

d2 = pd.DataFrame({'col1': [1, 10], 'col3': [3, 4]})

joined = d1.set_index('col1').join(d2.set_index('col1'))

这完全符合您的要求:

>>joined

      col2  col3
col1            
1        3   3.0
2        4   NaN
4        5   NaN