<p>从<code>itertools</code>到<a href="https://docs.python.org/3/library/itertools.html#itertools.permutations" rel="nofollow noreferrer">^{<cd2>}</a>、<a href="https://docs.python.org/3/library/itertools.html#itertools.product" rel="nofollow noreferrer">^{<cd3>}</a>和<a href="https://docs.python.org/3/library/itertools.html#itertools.chain.from_iterable" rel="nofollow noreferrer">^{<cd4>}</a>的一种方式:</p>
<pre><code>from itertools import chain, permutations, product
df = pd.DataFrame(
chain.from_iterable(product(df1[col_1], df1[col_2])
for col_1, col_2 in permutations(df1.columns, r=2)),
columns=["Target", "Source"]
)
</code></pre>
<p>我们首先得到所有列的2-<code>permutations</code>,然后对于每一对,形成它们的值的<code>product</code>。对所有置换执行此操作后,使用<code>chain.from_iterable</code>将它们展平,并传递给数据帧构造函数</p>
<p>我得到一个108 x 2的数据帧:</p>
<pre><code> Target Source
0 kim lee
1 kim kim
2 kim lee
3 jackson lee
4 jackson kim
.. ... ...
103 g d
104 g a
105 d b
106 d d
107 d a
</code></pre>
<p>(其中<em>108=3*9*4:3=行,9=行*其他列,4=总列</em>)</p>