3 回答
TA贡献1864条经验 获得超2个赞
另一种方法是使用 np.wherenumpy.where(condtion,yes,no)
在这种情况下,我使用嵌套np.where这样
np.where(If Flag=2,take val_2,(take x)) where takex is another np.where
df['Flag']=np.where(df['Flag']==1,df['val_1'],(np.where(df['Flag']==2,df['val_2'],df['Flag'])))
df
输出
TA贡献1846条经验 获得超7个赞
有几种方法可以做到这一点,首先你的初始代码非常接近,你只需要结束分配:
df.loc[df['Flag'] == 1, 'Flag'] = df['val_1']
print(df)
Date val_1 val_2 Flag
0 2018-08-27 221.0 121.0 0.0
1 2018-08-28 222.0 122.0 222.0
2 2018-08-29 223.0 123.0 0.0
3 2018-08-30 224.0 124.0 2.0
4 2018-08-31 225.0 125.0 0.0
你在这里做的是过滤你的数据框并替换条件匹配的值。在这种情况下,Flag 等于 1。
既然你正在做多重评估,让我们使用np.select
import numpy as np
conditions = [df['Flag'].eq(1),
df['Flag'].eq(2)]
choices = [df['val_1'],df['val_2']]
df['Flag'] = np.select(conditions,choices,default=df['Flag'])
这样做的目的是评估您拥有的所有条件。将默认值保留为原始列。您可以在其中添加更多条件,并将 OR 语句用 | 括在括号中。(管道)分离器。IE[(df['Flag'] == 1 | df['Flag'] == 2)]
Date val_1 val_2 Flag
0 2018-08-27 221.0 121.0 0.0
1 2018-08-28 222.0 122.0 222.0
2 2018-08-29 223.0 123.0 0.0
3 2018-08-30 224.0 124.0 124.0
4 2018-08-31 225.0 125.0 0.0
TA贡献1874条经验 获得超12个赞
国际大学联盟:
new_vals = df.lookup(df.index, df.columns[df.Flag-1])
df['Flag'] = df.Flag.mask(df.Flag>0, new_val)
注意:正如@Erfan 所评论的,这也可以:
df['Flag'] = df.lookup(df.index, df.columns[df.Flag-1])
输出:
val_1 val_2 Flag
Date
2018-08-27 221.0 121.0 0
2018-08-28 222.0 122.0 222
2018-08-29 223.0 123.0 0
2018-08-30 224.0 124.0 124
2018-08-31 225.0 125.0 0
- 3 回答
- 0 关注
- 109 浏览
添加回答
举报