Python 基于现有单元格下的值创建新列

Python 基于现有单元格下的值创建新列,python,pandas,Python,Pandas,我想基于数据帧的下一个索引中已经存在的值在数据帧中创建一个新列。因此,数据帧如下所示: col1 col2 A Test A Test1 A Test2 B BTest B BTest1 A Test Test1 A Test1 Test2 A Test2 B BTest BTest1 B BTest1 因此,在这种情况下,每个新字母都必须改变,最终的数据帧应该如下所示: col1 col2 A Test A Test1 A Test2

我想基于数据帧的下一个索引中已经存在的值在数据帧中创建一个新列。因此,数据帧如下所示:

col1 col2
A   Test
A   Test1
A   Test2
B   BTest
B   BTest1
A  Test  Test1
A  Test1  Test2
A  Test2  
B  BTest  BTest1
B  BTest1  
因此,在这种情况下,每个新字母都必须改变,最终的数据帧应该如下所示:

col1 col2
A   Test
A   Test1
A   Test2
B   BTest
B   BTest1
A  Test  Test1
A  Test1  Test2
A  Test2  
B  BTest  BTest1
B  BTest1  

我想稍后在有向图中绘制这个,这就是为什么我需要这样做。在不编写exspensive for循环的情况下执行此操作,您有什么想法吗?

使用
groupby
并将列值上移1(因此,
shift(-1)
):



我想这是通过进行自连接实现的

import pandas as pd

df = pd.read_clipboard()

df = df.sort_values(['col1', 'col2']) 

df.reset_index() \
                .merge(df.shift(-1).reset_index(), \
                       how='left', \
                       left_on = ['index', 'col1'], \
                       right_on = ['index', 'col1'])\
               .drop('index', axis=1)
输出:

Out[176]: 
  col1  col2_x  col2_y
0    A    Test   Test1
1    A   Test1   Test2
2    A   Test2     NaN
3    B   BTest  BTest1
4    B  BTest1     NaN

通常情况下可以工作,但之后我必须通过索引将其连接回数据帧。krewsayder的解决方案是完全的solution@PV8或者干脆
df['new']=df.groupby('col1')['col2'].shift(-1)
有什么问题吗?加入完整的数据框架很酷,如果只需要一列,那么解决方案表单@cs95就更简单了