【问题标题】:Combine Pandas Data Frame if Values Match in a Columns如果列中的值匹配,则合并 Pandas 数据框
【发布时间】:2018-07-24 11:50:24
【问题描述】:

我有 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   

如果 df1['name'] 中存在 df2['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

【问题讨论】:

  • 您想使用pandas.merge 函数。有很多关于它的问题

标签: python pandas dataframe data-science


【解决方案1】:

试试这个。它之所以有效,是因为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')

【讨论】:

    【解决方案2】:

    您可以使用熊猫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
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 2021-01-30
      • 2021-12-17
      • 2018-10-16
      • 2021-04-17
      • 2019-01-06
      相关资源
      最近更新 更多