自愿加入熊猫

Nuc*_*lar 7 python dataframe data-structures pandas

我想在Pandas数据帧上执行自联接,以便将某些行附加到原始行.每行都有一个标记'i',表示右边应该附加哪一行.

d = pd.DataFrame(['A','B','C'], columns = ['some_col'])
d['i'] = [2,1,1]

In [17]: d
Out[17]: 
  some_col  i
0        A  2
1        B  1
2        C  1
Run Code Online (Sandbox Code Playgroud)

期望的输出:

  some_col  i some_col_y
0        A  2          C
1        B  1          B
2        C  1          B
Run Code Online (Sandbox Code Playgroud)

也就是说,第2行被附加到第0行,第1行到第1行,第1行到第2行(如i所示).

我对如何去做的想法是

pd.merge(d, d, left_index = True, right_on = 'i', how = 'left')
Run Code Online (Sandbox Code Playgroud)

但它完全产生了其他东西.怎么做正确?

MSe*_*ert 6

而不是使用merge你也可以使用索引和赋值:

>>> d['new_col'] = d['some_col'][d['i']].values
>>> d
  some_col  i new_col
0        A  2       C
1        B  1       B
2        C  1       B
Run Code Online (Sandbox Code Playgroud)


piR*_*red 5

joinon='i'

d.join(d.drop('i', 1), on='i', rsuffix='_y')

  some_col  i some_col_y
0        A  2          C
1        B  1          B
2        C  1          B
Run Code Online (Sandbox Code Playgroud)