python - 如何在不更改前一个条件的结果的情况下对行应用多个条件?
问题描述
我有熊猫数据框,我需要在其中应用多个条件。这是我的 df 样本
Cond Samp
A_B_C Org
A_B_C Org
A_B_C Sea
A_B_C Paid
我需要一个基于此条件的新列
df['New'] = df[df['Samp'] == 'Org']['Cond'].str.rsplit("_", expand=True)[0]
df['New'] = df[df['Samp'] == 'Sea']['Cond'].str.rsplit("_", expand=True)[0]
df['New'] = df[df['Samp'] == 'Paid']['Cond'].str.rsplit("_", expand=True)[2]
所需的输出:
Cond Samp New
A_B_C Org A
A_B_C Org A
A_B_C Sea A
A_B_C Paid C
解决方案
创建字典来映射条件:
cond = {'Org': 0, 'Sea': 0, 'Paid': 2}
df['New'] = df.apply(lambda x: x['Cond'].split('_')[cond[x['Samp']],
axis="columns")
>>> df
Cond Samp New
0 A_B_C Org A
1 A_B_C Org A
2 A_B_C Sea A
3 A_B_C Paid C
推荐阅读
- java - JavaFX 媒体循环
- angular - 使用 RxJS 的 Angular 6 错误:无法读取未定义的属性“调用”
- rx-java - 为什么 Observable.empty() 不向下游传播 onComplete() ?
- reactjs - React Redux 状态变化
- c++ - 无法在 C++ 代码中获得十进制输出。
- java - 这是 IntStream 嵌套循环的最佳选择吗?错误是什么?
- python - 如何在numpy中做antilog?
- angular - 无法将快速服务器中的图像提供给 Angular 2
- .net - 如何在 vb.net 中使用字典数据类型
- c# - 我需要帮助来恢复我的项目(被意外删除)