[英]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.