首页 > 解决方案 > 根据单个列中的值向数据框列添加值

问题描述

我有一个DataFrame每年的 kg/ha 值,其中列从 1950 年到 2015 年。第一列是gridcode_1从 1 到 4 的网格代码 ( )。每个网格代码都有一个特定的附加值,我想添加到 kg/ha 值其他列。

我试图通过 for 循环和正则表达式来解决它

for x in kilograms_dep2:
    if kilograms_dep2['gridcode_1'] == 1:
        kilograms[regex="[0-9]{4}"] + 2.7
    elif kilograms_dep2['gridcode_1'] == 2:
        kilograms_dep2[regex="[0-9]{4}"] + 16.04
    elif kilograms_dep2['gridcode_1'] == 3:
        kilograms_dep2[regex="[0-9]{4}"] + 2.7
    elif kilograms_dep2['gridcode_1'] == 4:
        kilograms_dep2[regex="[0-9]{4}"] + 0.75

但它只会导致语法错误。

这是数据框的前几个条目

 gridcode_1         1950_y         1951_y         1952_y         1953_y
          1    1477.273256    1477.273256    1477.273256    1477.273256
          2  523883.351859  523883.351859  523883.351859  523883.351859
          3    2698.864601    2698.864601    2698.864601    2698.864601
          4    6458.175014    6458.175014    6458.175014    6458.175014

所以gricode_1 = 1我想添加2.7gridcode_1 = 2我想添加16.04等。

对于优雅的解决方案,我将不胜感激。

标签: pythonregexfor-loop

解决方案


columns_list  = list(df.columns)
columns_list.remove('code')

df.loc[(df['code'] == 1 ),columns_list] = df.loc[(df['code'] == 1),columns_list] + 2.7

df.loc[(df['code'] == 2 ),columns_list] = df.loc[(df['code'] == 2),columns_list] + 16.04

结果:

结果


推荐阅读