【问题标题】:Update dataframe column based on another dataframe column without for loop基于另一个数据框列更新数据框列而不使用 for 循环
【发布时间】:2021-09-14 20:40:37
【问题描述】:

我有两个数据框 df1 和 df2。

df1:

id val
1  25
2  40
3  78

df2:

id val
2  8
1  5

现在我想做类似df1['val'] = df1['val']/df2['val'] 的事情来匹配id。我可以通过遍历所有df2 行来做到这一点,因为df2df1 的一个子集,所以它可能会丢失一些我希望保持不变的值。这就是我现在拥有的:

for row in df2.iterrows():
    df1.loc[df1['id']==row[1]['id'], 'val'] /= row[1]['val']

df1:

id val
1  5
2  5
3  78

如何在不使用 for 循环来提高速度的情况下达到同样的效果?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    Series.mapSeries.div 一起使用:

    df1['val'] = df1['val'].div(df1['id'].map(df2.set_index('id')['val']), fill_value=1)
    print (df1)
       id   val
    0   1   5.0
    1   2   5.0
    2   3  78.0
    

    merge 左连接的解决方案:

    df1['val'] = df1['val'].div(df1.merge(df2, on='id', how='left')['val_y'], fill_value=1)
              
    print (df1)
       id   val
    0   1   5.0
    1   2   5.0
    2   3  78.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-18
      • 2020-09-19
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2022-12-01
      • 2020-12-07
      相关资源
      最近更新 更多