簡體   English   中英

Pandas 根據匹配的行值和列名設置列值

[英]Pandas set column value based on matching row value and column name

我有一個看起來像這樣的數據框

   start        end            2017-06-08   2018-04-08  2019-04-20
   2018-04-20   2019-04-20      NaN           NaN          NaN
   2018-04-20   2019-04-20      NaN           NaN          NaN
   2017-06-08   2018-04-08      NaN           NaN          NaN

我需要讓它像這樣

   start        end            2017-06-08  2018-04-20   2019-04-20
   2018-04-20   2019-04-20      NaN           1               1
   2018-04-20   2019-04-20      NaN           1               1
   2017-06-08   2018-04-08       1            1              NaN

這意味着我將更改匹配列名的行值。

更改匹配列名的行值

如果您想匹配開始列和結束列中的列名,這是我的方法:

m=(df.stack().reset_index(level=1)
 .set_index(0,append=True)['level_1'].unstack(fill_value=0).astype(bool)*1)
df.update(m)

print(df)
        start         end  2017-06-08  2018-04-20  2018-04-08  2019-04-20
0  2018-04-20  2019-04-20         0.0         1.0         0.0         1.0
1  2018-04-20  2019-04-20         0.0         1.0         0.0         1.0
2  2017-06-08  2018-04-08         1.0         0.0         1.0         0.0

一種方法來melt先進行比較,該pivot回來

s=df.reset_index().melt(['index','start','end'])
s['value']=s.variable.between(s.start,s.end).astype(int)
yourdf=s.pivot_table(index=['index','start','end'],columns='variable',values='value',aggfunc='first').reset_index(level=[1,2])
yourdf
variable       start         end  ...  2018-04-20  2019-04-20
index                             ...                        
0         2018-04-20  2019-04-20  ...           1           1
1         2018-04-20  2019-04-20  ...           1           1
2         2017-06-08  2018-04-08  ...           0           0
[3 rows x 6 columns]

IUC:

for col in df.columns[2:]:

    df[col] = np.where((df.start==col)|(df.end==col),1,np.nan)

輸出:

0       start         end  2017-06-08  2018-04-20  2018-04-08  2019-04-20
1  2018-04-20  2019-04-20         NaN         1.0         NaN         1.0
2  2018-04-20  2019-04-20         NaN         1.0         NaN         1.0
3  2017-06-08  2018-04-08         1.0         NaN         1.0         NaN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM