Python:如何使用if条件按行求积?

2024-09-30 01:22:35 发布

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

我知道Sumproduct上存在一些关于堆栈溢出的问题,但解决方案对我不起作用。我对Python熊猫也很陌生

对于每一行,我只想在列['2020']的情况下对某些列进行求和运算=0 我使用了以下代码,但出现错误:

索引器错误:(“2018年索引超出了轴0的范围,大小为27”,“发生在索引0上”)

请帮忙。多谢各位

# df_copy is my dataframe

column_list=[2018,2019]

weights=[6,9]

def test(df_copy):


    if df_copy[2020]!=0:

        W_Avg=sum(df_copy[column_list]*weights)

    else:

        W_Avg=0


    return W_Avg

 
df_copy['sumpr']=df_copy.apply(test, axis=1)

df_复制

**|2020 | 2018 | 2019 | sumpr|**
|0    | 100  | 20   | 0    |
|1    | 30   | 10   | 270  |
|3    | 10   | 10   | 150  |

如果这张桌子看起来不像桌子,我很抱歉。我无法在Stackoverflow中正确创建表

对于特定行基本上,如果

2020 = 2 ,
2018 =30 ,
2019 =10 ,

sumpr= 30 * 9 + 10*9 = 270

Tags: testdf堆栈错误情况column解决方案list
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:35

列名很可能是字符串,而不是整数

要确认它,请运行df_copy.columns,您应该会收到如下消息:

Index(['2020', '2018', '2019'], dtype='object')

(注意列名周围的撇号)

因此,将列列表更改为:

column_list = ['2018', '2019']

在函数中,将列名也更改为字符串:

df_copy['2020']

然后你的代码应该运行

您还可以运行更简洁的代码:

df_copy['sumpr'] = np.where(df_copy['2020'] != 0, (df_copy[column_list]
    * weights).sum(axis=1), 0)

相关问题 更多 >

    热门问题