gpt4 book ai didi

python - 如何通过for循环和def函数替换列值?

转载 作者:行者123 更新时间:2023-12-01 00:07:48 24 4
gpt4 key购买 nike

我想用 def 函数替换多列的列值。 If value > 8 = 100, if value > 6 = 0, if value < 7 = 0, if NaN = NaN

我的数据如下。

ID  MONTH   COUNTRY Brand   A1  A2  A3  A4  A5  A6  A7  A8  A9  A10
1 201906 USA Apple 10 7 10 0 NaN NaN NaN 10 NaN NaN
2 201906 USA Samsung 8 6 8 NaN NaN NaN NaN 9 NaN NaN
3 201906 USA Apple 10 7 10 NaN NaN 10 3 10 NaN NaN
4 201906 USA Samsung 9 5 10 NaN 1 NaN NaN NaN 7 4
5 201906 USA Apple 10 7 10 NaN NaN NaN NaN 10 NaN NaN

我尝试了下面的代码,但没有更改列值。

list = ['A1', 'A3', 'A4', 'A7', 'A10']
new_list = ['B1', 'B3', 'B4', 'B7', 'B10']

def f(x):
for i in list:
if x[i] > 8:
value = 100
elif x[i] > 6:
value = 0
elif x[i] < 7:
value = -100
else:
value = np.nan
return value

df[new_list] = df[list].apply(f, axis=1)

我该怎么办?

最佳答案

我建议不要在函数内部循环,而是将其移到外部并循环遍历列:

list = ['A1', 'A3', 'A4', 'A7', 'A10']

def f(x):
if x > 8:
value = 100
elif x > 6:
value = 0
elif x < 7:
value = -100
else:
value = np.nan
return value

for i in list:
df[i] = df[i].apply(f)

如果您想将更新后的值写入新列,有两种方法可以实现:

添加固定前缀:

for i in list:
df[i + '_updated'] = df[i].apply(f)

或者使用第二个列表来定义新的列名称:

list_current = ['A1', 'A3', 'A4', 'A7', 'A10']
list_new = ['B1', 'B3', 'B4', 'B7', 'B10']

for i, j in zip(list_current, list_new):
df[j] = df[i].apply(f)`

关于python - 如何通过for循环和def函数替换列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com