如何将函数应用于数据框中的所有行?

2024-10-03 06:28:10 发布

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

我对如何将函数应用于数据帧感到困惑。一般来说,在创建用户定义的函数时,我熟悉最终产生“返回”值。除此之外,我需要在数据帧列的每个单元格中显示“return”值,我无法理解这一点。该函数基于“if”和“if else”条件语句,我不确定如何将其应用于我的数据帧。也许我遗漏了括号或括号,但我不能完全确定。我将在下面解释

我有以下数据帧:

       Day      No_employee?       No_machinery?      Production_potential
---------------------------------------------------------------------------
0    Day 1                 1                   0                         5      
1    Day 2                 1                   1                         4
2    Day 3                 0                   1                         3
3    Day 4                 1                   0                         8
4    Day 5                 0                   0                         6
5    Day 6                 0                   1                         3
6    Day 7                 0                   0                         5
7    Day 8                 1                   1                         2
...

现在,我想采用我的dataframe并根据以下逻辑附加一个名为Production_lost的新列:

在工厂里,要生产产品,你需要1)一名员工在场,2)一台运转正常的机器。若你们不能生产任何产品,那个么那个潜在的产品就变成了丢失的产品

对于每一天(考虑工厂),如果No_employee?为真(=1),则无论No_machinery?Production_lost=Production_potential如何,都无法生产任何产品。如果No_machinery?为真(=1),则无论No_employee?Production_lost=Production_potential,都不能生产任何产品。只有当No_employee?No_machinery?都为0时Production_lost=0。如果您有一名员工在场且机器正常工作,则不会出现生产损失

因此,我有以下代码:

df['Production_loss'] = df['No_employee?'].apply(lambda x: df['Production_potential'] if x == 1.0 else df['Production_potential'] * df['No_machinery?'])

这将生成以下错误消息:

ValueError: Wrong number of items passed 70, placement implies 1

我理解这意味着有太多的参数被应用于一个列(我想),但我不知道如何解决这个问题,或者我是如何解决这个问题的。有没有简单的解决办法

我尝试生成的数据帧如下所示:

       Day      No_employee?       No_machinery?      Production_potential     Production_lost
-----------------------------------------------------------------------------------------------
0    Day 1                 1                   0                         5                   5
1    Day 2                 1                   1                         4                   4
2    Day 3                 0                   1                         3                   3  
3    Day 4                 1                   0                         8                   8
4    Day 5                 0                   0                         6                   0
5    Day 6                 0                   1                         3                   3
6    Day 7                 0                   0                         5                   0
7    Day 8                 1                   1                         2                   2
...

Tags: 数据函数nodfif产品工厂employee
2条回答

努比,在哪里

df['Production_lost'] = np.where(((df['No_employee?'] == 1) | (df['No_machinery?'] == 1)),
                                 df['Production_potential'], 0)

     Day  No_employee?  No_machinery?  Production_potential  Production_lost
0  Day 1             1              0                     5                5
1  Day 2             1              1                     4                4
2  Day 3             0              1                     3                3
3  Day 4             1              0                     8                8
4  Day 5             0              0                     6                0
5  Day 6             0              1                     3                3
6  Day 7             0              0                     5                0
7  Day 8             1              1                     2                2

无需使用apply,请改用pd.Series.where

df['Production_loss'] = df['Production_potential'].where(df['No_employee?'].eq(1), df['Production_potential'] * df['No_machinery?'])

您还可以使用乘法:

df['Production_loss'] = ~(df['No_employee?'] * df['No_machinery?']) * df['Production_potential']

相关问题 更多 >