【问题标题】:fill a new column in a pandas dataframe from the value of another dataframe [duplicate]从另一个数据框的值填充熊猫数据框中的新列[重复]
【发布时间】:2018-09-07 15:17:48
【问题描述】:

我有两个数据框:

pd.DataFrame(data={'col1': ['a', 'b', 'a', 'a', 'b'], 'col2': ['c', 'c', 'd', 'd', 'c'], 'col3': [1, 2, 3, 4, 5, 1]})
   col1 col2  col3  
0    a    c     1   
1    b    c     2   
2    a    d     3   
3    a    d     4   
4    b    c     5   
5    h    i     1
pd.DataFrame(data={'col1': ['a', 'b', 'a', 'f'], 'col2': ['c', 'c', 'd', 'k'], 'col3': [12, 23, 45, 78]})
    col1 col2  col3 
0    a    c     12  
1    b    c     23  
2    a    d     45
3    f    k     78  

并且我想根据可以在第二个中找到的 col1 和 col2 的值在第一个中构建一个新列。那就是这个新的:

pd.DataFrame(data={'col1': ['a', 'b', 'a', 'a', 'b'], 'col2': ['c', 'c', 'd', 'd', 'c'], 'col3': [1, 2, 3, 4, 5],'col4' : [12, 23, 45, 45, 23]})
    col1 col2  col3  col4
0    a    c     1    12
1    b    c     2    23
2    a    d     3    45
3    a    d     4    45
4    b    c     5    23
5    h    i     1    NaN

我怎么能做到这一点?

感谢您的关注 :)

编辑:有人建议在这个主题Adding A Specific Column from a Pandas Dataframe to Another Pandas Dataframe 中寻找答案,但这不是同一个问题。

在这里,不仅 ID 不存在,因为它被拆分为 col1 和 col2,而且最重要的是,虽然在第二个数据帧中是唯一的,但在第一个数据帧中它不是唯一的。这就是为什么我认为合并和连接都不能解决这个问题。

Edit2 :另外,df1 的 col1 和 col2 对可能不存在于 df2 中,在这种情况下,在 col4 中等待 NaN,并且 df1 中可能不需要 df2 的 col1 和 col2 对.为了说明这些情况,我在 df1 和 df2 中添加了一些行,以显示在最坏情况下的情况

【问题讨论】:

  • df1.merge(df2.rename(columns={'col3': 'col4'}))
  • 它不起作用,因为 col4 根本不是 df2 的 col3。 col4 必须根据 col1 和 col2 的值从 df2 的 col3 构建

标签: python-3.x pandas dataframe


【解决方案1】:

你也可以使用maplike

In [130]: cols = ['col1', 'col2']

In [131]: df1['col4'] = df1.set_index(cols).index.map(df2.set_index(cols)['col3'])

In [132]: df1
Out[132]:
  col1 col2  col3  col4
0    a    c     1    12
1    b    c     2    23
2    a    d     3    45
3    a    d     4    45
4    b    c     5    23

【讨论】:

  • TypeError: 'Series' 对象不可调用
  • 我得到和@pyd一样的错误
  • 尝试使用@zero 的答案中的cols 然后pd.merge(df1.set_index(cols),df2.set_index(cols), left_index=True, right_index=True).reset_index() 然后更改列名
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
相关资源
最近更新 更多