【问题标题】:Assigning values to dataframe columns from a list based on value of another column in dataframe根据数据框中另一列的值将值分配给列表中的数据框列
【发布时间】:2020-05-23 23:20:51
【问题描述】:

根据数据框中另一列的值从列表中为数据框列分配值

我有两个数据框,df1 和 df2,其中

df1 = pd.DataFrame(np.array([['a', 'b', 'c','d'], [1, 2, 3, 4]]),
                   columns=['x', 'y'])


df2 = pd.DataFrame(np.array([['a', 'b', 'c', 'a', 'c', 'b','b'], [4, 5, 6, 1, 32, 1, 8]]),
                   columns=['x', 'z'])


我想基于 df2 创建一个数据帧 df3,并分配适当的 df1['y'] 值。因此,例如,我希望结果如下所示:

df3 = pd.DataFrame(np.array([['a', 'b', 'c', 'a', 'c', 'b','b'], [4, 5, 6, 1, 32, 1, 8] , [1, 2, 3, 1, 3, 2, 2 ] ]),
                   columns=['x', 'z', 'y'])

在我的实际情况中,x 有数千个可能的值,所以我想尽可能避免使用if df3['x'] == a: df3['y'] = 1 样式的解决方案。

【问题讨论】:

  • 到底是什么问题?你有没有尝试过什么,做过什么研究?

标签: python pandas


【解决方案1】:

您可以通过合并来实现:

df3 = df2.merge(df1, how="left", on="x")

【讨论】:

    【解决方案2】:

    设置:

    import pandas as pd
    import numpy as np
    
    data={'x':['a', 'b', 'c','d'],
          'y':[1, 2, 3, 4]}
    df1 = pd.DataFrame(data)
    
    data2={'x':['a', 'b', 'c', 'a', 'c', 'b','b'],
           'z':[4, 5, 6, 1, 32, 1, 8]}
    df2 = pd.DataFrame(data2)
    
    data3={'x':['a', 'b', 'c', 'a', 'c', 'b','b'],
           'z':[4, 5, 6, 1, 32, 1, 8]}
    df3 = pd.DataFrame(data3)
    

    字典法:

    # Make a dictionary
    dict = df1.set_index('x').to_dict()
    # Map to dictionary
    df3 = df2.assign(x=df2['x'].map(*dict.values()))
    

    您必须解压缩 dict,因为它实际上是 2 个字典,但您只需要第二个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2023-03-25
      相关资源
      最近更新 更多