猿问

用另一列中的相同行值替换熊猫数据框列中的值

我有一个看起来像这样的熊猫数据框:


            val_1   val_2   Flag

Date                       

2018-08-27  221.0  121.0     0

2018-08-28  222.0  122.0     1

2018-08-29  223.0  123.0     0

2018-08-30  224.0  124.0     2

2018-08-31  225.0  125.0     0

我想根据标志条件将标志列值更改为其他列的相同值。即,如果 Flag 为 1,则将同一行中的 1 替换为 val_1,如果 Flag 为 2,则将其替换为 val_2。我正在寻找的输出如下所示:


            val_1   val_2   Flag

Date                       

2018-08-27  221.0  121.0     0

2018-08-28  222.0  122.0     222.0

2018-08-29  223.0  123.0     0

2018-08-30  224.0  124.0     124.0

2018-08-31  225.0  125.0     0

我知道我可以.loc这样使用df.loc[df['Flag'] == 1, ['Flag']] =。我不知道代码右侧是什么。


守着星空守着你
浏览 148回答 3
3回答

慕斯王

另一种方法是使用 np.wherenumpy.where(condtion,yes,no)在这种情况下,我使用嵌套np.where这样np.where(If Flag=2,take val_2,(take x)) where takex is another np.wheredf['Flag']=np.where(df['Flag']==1,df['val_1'],(np.where(df['Flag']==2,df['val_2'],df['Flag'])))df输出

喵喵时光机

有几种方法可以做到这一点,首先你的初始代码非常接近,你只需要结束分配:df.loc[df['Flag'] == 1, 'Flag'] = df['val_1']print(df)         Date  val_1  val_2   Flag0  2018-08-27  221.0  121.0    0.01  2018-08-28  222.0  122.0  222.02  2018-08-29  223.0  123.0    0.03  2018-08-30  224.0  124.0    2.04  2018-08-31  225.0  125.0    0.0你在这里做的是过滤你的数据框并替换条件匹配的值。在这种情况下,Flag 等于 1。既然你正在做多重评估,让我们使用np.selectimport numpy as npconditions = [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   Flag0  2018-08-27  221.0  121.0    0.01  2018-08-28  222.0  122.0  222.02  2018-08-29  223.0  123.0    0.03  2018-08-30  224.0  124.0  124.04  2018-08-31  225.0  125.0    0.0

HUWWW

国际大学联盟: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  FlagDate                          2018-08-27  221.0  121.0     02018-08-28  222.0  122.0   2222018-08-29  223.0  123.0     02018-08-30  224.0  124.0   1242018-08-31  225.0  125.0     0
随时随地看视频慕课网APP

相关分类

Go
我要回答