<p>这里有一个使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.melt.html?highlight=melt#pandas.DataFrame.melt" rel="nofollow noreferrer">^{<cd1>}</a>和<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html?highlight=merge#pandas.merge" rel="nofollow noreferrer">^{<cd2>}</a>的方法</p>
<pre><code>>>> df1
playerA playerB PlayerC PlayerD
0 kim lee b f
1 jackson kim d g
2 dan lee a d
>>> target = df1.melt(value_name='Source')[['Source']]
>>> df_new = pd.merge(target.rename(columns={'Source':'Target'}), target, how='cross')
>>> df_new
Target Source
0 kim kim
1 kim jackson
2 kim dan
3 kim lee
4 kim kim
.. ... ...
139 d d
140 d a
141 d f
142 d g
143 d d
</code></pre>
<P>此方法不考虑^ {< CD3>}和^ {CD4>}的相同索引,但可以使用以下简单的数学方法轻松地删除这些行:</p>
<pre><code>>>> indices_to_drop = [idx * len(target) + idx for idx in range(len(target)]
>>> indices_to_drop
[0, 13, 26, 39, 52, 65, 78, 91, 104, 117, 130, 143]
>>> df_new.drop(indices_to_drop).reset_index(drop=True)
Target Source
0 kim jackson
1 kim dan
2 kim lee
3 kim kim
4 kim lee
.. ... ...
127 d b
128 d d
129 d a
130 d f
131 d g
</code></pre>