我的数据框如下:
Source Target Value Source location Target location
a b 10 [12.3,1.9] [13.5,14.3]
c v 10 [15.3,1.9] [13.5,94.3]
c d 18 [1.4,31.9] [16.6,44.7]
p q 10 [12.3,1.9] [13.5,15.3]
x z 8 [6.3,1.4] [47.5,4.3]
我想找到Source
和Target
之间的两个配对。我希望最终结果看起来像这样:
Source Target Value Source location Target location
a b 10 [12.3,1.9] [13.5,14.3]
b a 9 [72.9,18.6] [14.2,31.6]
c e 18 [1.4,31.9] [16.6,44.7]
e c 14 [19.4,5.1] [12.3,23.4]
z x 6 [92.3,1.9] [43.5,14.3]
x z 8 [6.3,1.4] [47.5,4.3]
如您所见,我想同时获得两对Source
和Target
-即a-c
和c-a
。
我尝试研究Stackoverflow,但似乎这个问题之前从未得到解答。我查看了this和this,但它们使用groupby
来查找未重新排列现有数据帧的列数。 This是最接近我的,但是它返回的是行而不是列的唯一组合的数据帧。
任何帮助将不胜感激。
答案 0 :(得分:0)
可能的解决方案之一是:
定义一个即将应用的功能:
def fn(row):
r2 = row.copy()
r2.Source, r2.Target = r2.Target, r2.Source
r2['Source location'], r2['Target location'] =\
r2['Target location'], r2['Source location']
return r2
然后运行:
pd.concat([df, df.apply(fn, axis=1)]).sort_index()
此说明:
如果您对索引值“加倍”不满意,请添加.reset_index(drop=True)
。