Pandas .apply 有条件 if 在不同的列中

我有一个数据框如下。nan我正在尝试检查中是否有 a Liq_Factor,如果是,则将 1 放入否则除法use/TW。结果列于测试中。


+---+------------+------------+--------+--------+--------+

| 1 |            | Liq_Factor | Zscire | Use    | Tw     |

| 2 | 01/10/2020 | 36.5       | 44     | 43.875 | 11.625 |

| 3 | 02/10/2020 | Nan        | 43.625 | 13.625 | 33.25  |

| 4 | 03/10/2020 | 6.125      | 47.875 | 22.5   | 4.625  |

| 5 | 04/10/2020 | Nan        | 34.25  | 37.125 | 36     |

| 6 | 05/10/2020 | 43.875     | 17.375 | 5.5    | 36.25  |

| 7 | 06/10/2020 | 40         | 14.125 | 21.125 | 14.875 |

| 8 | 07/10/2020 | 42.25      | 44.75  | 21.25  | 31.75  |

+---+------------+------------+--------+--------+--------+

我想知道我是否可以.apply使用


DF1['Testing']=(DF1['Liq_Factor'].apply(lambda x: x=1 if pd.isna(DF1['Zscore']) else DF1['Use']/DF1['Tw'])

你能帮忙吗?


MM们
浏览 116回答 2
2回答

蝴蝶不菲

您可以使用 apply 或另一种替代方法是 numpy 中的 where 函数:df['Liq_Factor'] = np.where(df['Liq_Factor'] == np.Nan, 1, df['Use']/df['TW'])按照下面的评论,您可以执行以下操作:# create another column with the calculationdf['calc'] = (1/3)* df['ATV']/df['TW']*100000000# create two rules (you can use one rule and then the opposite)mask_0 = (df['calc'] < 1)mask_1 = (df['calc'] > 1)# change result value by conditiondf.loc[mask_0, 'Liq Factor'] = df['calc']df.loc[mask_1, 'Liq Factor'] = 1

杨魅力

使用下面的代码-df['Testing']=df.apply(lambda&nbsp;x:&nbsp;1&nbsp;if&nbsp;x['Liq_Factor']=='Nan'&nbsp;&nbsp;else&nbsp;x['Use']/x['Tw'],&nbsp;axis=1)根据评论部分的更改df['Testing']=df.apply(lambda&nbsp;x:&nbsp;1&nbsp;if&nbsp;x['Liq_Factor']=='Nan'&nbsp;&nbsp;else&nbsp;min(x['Use']/x['Tw'],1),&nbsp;axis=1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python