在中循环列并执行计算

2024-10-01 15:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用if语句编写一个for循环,该语句遍历列并执行一些乘法,在dataframe中创建一个新列。在

到目前为止,我已经实现了这一点,但这显然是错误的,因为实际上没有生成任何列。如有任何提示或建议,我们将不胜感激!在

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    

Tags: orindataframedffordataif错误
3条回答

它是一个数据帧,所以你可以像下面这样做

for _, row in df.iterrows():
    if  row['col1'] == 'a' or row['col1'] == 'b' or row['col1'] == 'c':
        row['col1'] = row['col1']* 4
    elif row['col1'] == 'CZK_fwdp':
        row['col1'] = row['col1']* 7
    else:
        row['col1'] = row['col1']* 5

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

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

^{pr2}$

使用apply方法沿参数轴=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)

你能给我们定义变量df的代码吗?在

请记住,数据帧比列表要复杂一点。必须指定要处理的列(请参见the documentation)。在

代码的第一行可能应该替换为以下内容:

for i in df['name_of_your_column']:

相关问题 更多 >

    热门问题