自愿加入熊猫

时间:2017-01-02 23:56:46

标签: python pandas data-structures dataframe

我想在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

期望的输出:

  some_col  i some_col_y
0        A  2          C
1        B  1          B
2        C  1          B

即,第2行将附加到第0行,第1行连接到第1行,第1行连接到第2行(如i所示)。

我对如何解决这个问题的想法是

pd.merge(d, d, left_index = True, right_on = 'i', how = 'left')

但它完全产生了其他东西。如何正确地做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

带有join

on='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

答案 2 :(得分:2)

Try this:

In [69]: d.join(d.set_index('i'), rsuffix='_y')
Out[69]:
  some_col  i some_col_y
0        A  2        NaN
1        B  1          B
1        B  1          C
2        C  1          A

or:

In [64]: pd.merge(d[['some_col']], d, left_index=True, right_on='i', suffixes=['_y','']).sort_index()
Out[64]:
  some_col_y some_col  i
0          C        A  2
1          B        B  1
2          B        C  1
相关问题