簡體   English   中英

如何根據不同日期的某些列移動pandas數據框中的值

[英]How to shift values in pandas dataframe based on some columns in different day

我得到如下dataframe

df
   adcode   model   day   label
   1        0       3     103
   1        1       2     112
   2        2       3     223
   2        2       4     224
   2        2       1     221
   1        0       2     102

# after shift
df
   adcode   model   day   label   next_label   prev_label
   1        0       2     102     103          nan
   1        0       3     103     nan          102
   1        1       2     112     nan          nan
   2        2       1     221     nan          nan
   2        2       3     223     224          nan
   2        2       4     224     nan          223

我想在第二天或前一天將adcodemodel的標簽轉移為新列。
我試過先df = df.sort_values(by=['adcode', 'model', 'day'])並使用groupbyshift以獲取下一個或上一個標簽。
但是我一直堅持下去。 我只知道如何根據['adcode', 'model', 'day']來移動標簽['adcode', 'model', 'day']例如groupby(['adcode', 'model', 'day'])['label'].shift() ,但我不知道如何在不同的日子根據['adcode', 'model']改變標簽。
如果不介意有人可以幫助我嗎?
在此先感謝。

理念是重塑數據幀在列的所有日子,所以可能shift ,然后concat兩個Series ,並DataFrame.join以原文:

df = df.sort_values(by=['adcode', 'model', 'day'])
df1 = df.set_index(['adcode', 'model', 'day'])['label'].unstack()

new = pd.concat([df1.shift(-1, axis=1).stack(), 
                 df1.shift(axis=1).stack()], 
                 keys=['next_label','prev_label'], axis=1)
df = df.join(new, on=['adcode', 'model', 'day'])
print (df)
   adcode  model  day  label  next_label  prev_label
5       1      0    2    102       103.0         NaN
0       1      0    3    103         NaN       102.0
1       1      1    2    112         NaN         NaN
4       2      2    1    221         NaN         NaN
2       2      2    3    223       224.0         NaN
3       2      2    4    224         NaN       223.0

詳細說明

print (df1)
day               1      2      3      4
adcode model                            
1      0        NaN  102.0  103.0    NaN
       1        NaN  112.0    NaN    NaN
2      2      221.0    NaN  223.0  224.0

暫無
暫無

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

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