根据现有单元格下的值创建一个新列

时间:2019-06-04 13:29:01

标签: 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  

我想稍后在有向图中绘制它,这就是为什么我需要这样做。有什么想法可以执行而无需编写大量的for循环吗?

2 个答案:

答案 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