给出一个数据帧:与其自身熊猫数据帧的笛卡尔乘积
id value
0 1 a
1 2 b
2 3 c
我希望得到一个新的数据帧,基本上是每一行与每一其他行的笛卡尔积不包括本身:
id value id_2 value_2
0 1 a 2 b
1 1 a 3 c
2 2 b 1 a
3 2 b 3 c
4 3 c 1 a
5 3 c 2 b
这是我到现在为止的方法。我用itertools获得产品,然后使用pd.concat
与df.loc
以获取新的数据帧。
from itertools import product
ids = df.index.values
ids_1, ids_2 = list(zip(*filter(lambda x: x[0] != x[1], product(ids, ids))))
df_new = pd.concat([df.loc[ids_1, :].reset_index(), df.loc[ids_2, :].reset_index()], 1).drop('index', 1)
df_new
id value id value
0 1 a 2 b
1 1 a 3 c
2 2 b 1 a
3 2 b 3 c
4 3 c 1 a
5 3 c 2 b
有没有更简单的方法?
可爱。 np.eye究竟如何适应这里? –
增加了一些颜色。 – piRSquared
不错的解决方案〜 – Wen