gpt4 book ai didi

python - 循环遍历列并执行计算

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:49 24 4
gpt4 key购买 nike

我正在尝试使用 if 语句编写一个 for 循环,该语句遍历列并执行一些乘法,在数据框中创建一个新列。

到目前为止,我已经实现了这一点,但这显然是错误的,实际上没有生成任何列。非常感谢任何提示或建议!

for i in df[1:]:
if i == 'a' or i == 'b' or i == 'b':
data[i] = df[i]* 4
elif i == 'CZK_fwdp':
data[i] = df[i]* 7
else:
data[i] = df[i]* 5
break

最佳答案

我创建了一个我通常如何执行相同任务的示例:

df = pd.DataFrame({'a': [1,1,1], 'b': [1,2,3], 'c': [0,-1,-2]})
print(df)
Out:
a b c
0 1 1 0
1 1 2 -1
2 1 3 -2

这是示例数据框。您可以应用一些函数来根据列的名称修改其所有列,可通过 name 属性使用。例如,列'a'只有名称a:

df['a'].name
Out:
'a'

def mapper(name):
return name + '_new'


df_new = df.apply(lambda col: col * 4 if col.name == 'a' or col.name == 'b'
else col * 7 if col.name == 'CZK_fwdp'
else col * 5, axis=0).rename(mapper=mapper, axis=1)
print(df_new)
Out:
a_new b_new c_new
0 4 4 0
1 4 8 -5
2 4 12 -10

使用 apply 方法沿参数 axis=1 的列应用 lambda 函数。函数mapper用于避免列名干扰。要获得所需的数据帧,您只需连接新旧数据帧即可:

df_conc = pd.concat((df, df_new), axis=1)
print(df_conc)
Out:
a b c a_new b_new c_new
0 1 1 0 4 4 0
1 1 2 -1 4 8 -5
2 1 3 -2 4 12 -10

如果你不喜欢lambda函数,你可以使用普通函数:

def modify_column(col):
if col.name == 'a' or col.name == 'b':
return col * 4
elif col.name == 'CZK_fwdp':
return col * 7
else:
return col * 5

df_new = df.apply(modify_column, axis=0).rename(mapper=mapper, axis=1)

关于python - 循环遍历列并执行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52874929/

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