亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用另一列中的相同行值替換熊貓數據框列中的值

用另一列中的相同行值替換熊貓數據框列中的值

Go
守著星空守著你 2022-10-11 16:07:32
我有一個看起來像這樣的熊貓數據框:            val_1   val_2   FlagDate                       2018-08-27  221.0  121.0     02018-08-28  222.0  122.0     12018-08-29  223.0  123.0     02018-08-30  224.0  124.0     22018-08-31  225.0  125.0     0我想根據標志條件將標志列值更改為其他列的相同值。即,如果 Flag 為 1,則將同一行中的 1 替換為 val_1,如果 Flag 為 2,則將其替換為 val_2。我正在尋找的輸出如下所示:            val_1   val_2   FlagDate                       2018-08-27  221.0  121.0     02018-08-28  222.0  122.0     222.02018-08-29  223.0  123.0     02018-08-30  224.0  124.0     124.02018-08-31  225.0  125.0     0我知道我可以.loc這樣使用df.loc[df['Flag'] == 1, ['Flag']] =。我不知道代碼右側是什么。
查看完整描述

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

輸出

http://img1.sycdn.imooc.com//634524600001889002200160.jpg

查看完整回答
反對 回復 2022-10-11
?
喵喵時光機

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


查看完整回答
反對 回復 2022-10-11
?
HUWWW

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


查看完整回答
反對 回復 2022-10-11
  • 3 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號