繁体   English   中英

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

[英]How to apply function to all rows in data frame?

我对如何将函数应用于数据框感到困惑。 通常在创建用户定义的函数时,我熟悉最终会产生一个“返回”值。 除了这种情况,我需要在数据框列的每个单元格中显示“返回”值,但我无法弄清楚。 该函数基于“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
...

现在我想根据以下逻辑获取我的数据框并附加一个名为Production_lost的新列:

在工厂中,要制造产品,您需要 1) 一名员工在场,以及 2) 运转良好的机器。 如果您无法生产任何产品,那么该潜在产品就会成为损失产品。

对于每一天(考虑工厂),如果No_employee? 为真(=1),那么无论No_machinery? ,都不能做出任何产品No_machinery? Production_lost = Production_potential 如果没有No_machinery? 为真(=1),那么无论No_employee? ,都不能做出任何产品No_employee? , 和Production_lost = Production_potential 仅当No_employee? No_machinery? both = 0, will 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
...

无需使用 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']

numpy.where

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM