[英]How to use pandas apply function on all columns of some rows of data frame
[英]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.