我想根据数据框的下一个索引中已有的值在数据框中创建一个新列。因此数据框如下所示:
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
我想稍后在有向图中绘制它,这就是为什么我需要这样做。有什么想法可以执行而无需编写大量的for循环吗?
答案 0 :(得分:1)
使用groupby
并将列值上移1(因此shift(-1)
):
df.groupby('col1')['col2'].shift(-1)
0 Test1
1 Test2
2 NaN
3 BTest1
4 NaN
Name: col2, dtype: object
df['new'] = df.groupby('col1')['col2'].shift(-1)
df
col1 col2 new
0 A Test Test1
1 A Test1 Test2
2 A Test2 NaN
3 B BTest BTest1
4 B BTest1 NaN
答案 1 :(得分: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