![](/img/trans.png)
[英]How to add one column to pandas dataframe based on values in different columns?
[英]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
我想在第二天或前一天將adcode
和model
的標簽轉移為新列。
我試過先df = df.sort_values(by=['adcode', 'model', 'day'])
並使用groupby
並shift
以獲取下一個或上一個標簽。
但是我一直堅持下去。 我只知道如何根據['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.