Skip to main content
 首页 » 编程设计

python之为 Pandas 数据框中的下一个连续行添加新列

2025年05月04日10me-sa

我有一个数据框:

    id  value 
0    1      0 
1    1    100 
2    1    200 
3    1    300 
4    1      0 
5    2      0 
6    2    500 
7    2    600 
8    2      0 
9    3      0 
10   3    700 
11   3      0 

对于值列中的每个条目,我想添加属于值列中下一行条目的新列,

例如:

     id  value   value2 
0    1      0     100 
1    1    100     200 
2    1    200     300 
3    1    300       0 
4    2    0       500 
5    2    500     600 
6    2    600       0 
7    3      0     700 
8    3    700       0  

请您参考如下方法:

选项 1
通过使用 numpy 而不是 pd.Series.shift 我避免了 np.nan 的插入和转换为 float

df.groupby( 
    'id', group_keys=False 
).apply(lambda d: d.iloc[:-1].assign(value2=d.value.values[1:])) 
 
    id  value  value2 
0    1      0     100 
1    1    100     200 
2    1    200     300 
3    1    300       0 
5    2      0     500 
6    2    500     600 
7    2    600       0 
9    3      0     700 
10   3    700       0 

选项 2
如果您所有的 'id' 都放在一起,我可以在整个列上执行 np.roll,然后再执行一个简单的 groupby。

df.assign( 
    value2=np.roll(df.value.values, -1) 
).groupby('id', group_keys=False).apply(pd.DataFrame.head, n=-1) 
 
    id  value  value2 
0    1      0     100 
1    1    100     200 
2    1    200     300 
3    1    300       0 
5    2      0     500 
6    2    500     600 
7    2    600       0 
9    3      0     700 
10   3    700       0