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就更简单了