Python 与熊猫自娱自乐
我希望在Pandas数据帧上执行自连接,以便将一些行附加到原始行。每一行都有一个标记“i”,指示应该在右侧将哪一行附加到它Python 与熊猫自娱自乐,python,pandas,data-structures,dataframe,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
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')
但它产生了另外一些东西。如何正确操作?尝试以下方法:
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
或:
除了使用
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
加入与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
我喜欢你的答案胜过我的。如果OP需要一个虚拟列-可以这样做:d.assign(some\u col\u y=d['some\u col'].loc[d['i']].values)
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