[英]Consecutive next value into new column pandas dataframe
我有一個數據幀
id value
v1 100
v1 200
v1 300
v1 400
v2 500
v2 600
v2 700
v3 800
v3 900
我希望將數據幀轉換為新的數據幀df2:
id val1 val2
v1 100 200
v1 200 300
v1 300 400
v1 400 100
v2 500 600
v2 600 700
v2 700 500
v3 800 900
v3 900 800
即移動下一列中的下一個連續值以及按ID分組的類型,
我嘗試使用df.shift(),但沒有工作。
有沒有替代方案?
我想你需要numpy.roll
:
df['val2'] = df.groupby('id')['value'].apply(lambda x: pd.Series(np.roll(x, -1))).values
print (df)
id value val2
0 1 100 200
1 1 200 300
2 1 300 400
3 1 400 100
4 2 500 600
5 2 600 700
6 2 700 500
7 3 800 900
8 3 900 800
我們想使用np.roll
來完成組內的任務。 通過使用transform
,我們繞過內部組索引掛起。
df.groupby('id').value.transform(np.roll, shift=-1)
0 200
1 300
2 400
3 100
4 600
5 700
6 500
7 900
8 800
Name: value, dtype: int64
我們可以使用assign
為df
副本添加一個新列
df.assign(val2=df.groupby('id').value.transform(np.roll, shift=-1))
id value val2
0 v1 100 200
1 v1 200 300
2 v1 300 400
3 v1 400 100
4 v2 500 600
5 v2 600 700
6 v2 700 500
7 v3 800 900
8 v3 900 800
或者直接在df
中添加一個新列
df['val2'] = df.groupby('id').value.transform(np.roll, shift=-1)
df
id value val2
0 v1 100 200
1 v1 200 300
2 v1 300 400
3 v1 400 100
4 v2 500 600
5 v2 600 700
6 v2 700 500
7 v3 800 900
8 v3 900 800
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.