<p>您需要将这两个数据传递到<code>pd.crosstab</code>以创建<code>RxC Table</code>:</p>
<pre class="lang-py prettyprint-override"><code>>>> data_crosstab = pd.crosstab(df.loc['USC'], df.loc['UCLA'])
UCLA 6 7 9 11 12 55
USC
0 0 1 0 0 0 0
1 1 0 0 0 0 0
4 0 0 0 0 1 1
7 0 0 1 0 0 0
21 0 0 0 1 0 0
</code></pre>
<p>然后您可以将其传递给<code>scipy.stats.chi2_contingency</code>以获得结果:</p>
<pre class="lang-py prettyprint-override"><code>>>> stats.chi2_contingency(pd.crosstab(df.loc['USC'], df.loc['UCLA']))
(24.000000000000014,
0.24239216167051175,
20,
array([[0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,
0.16666667],
[0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,
0.16666667],
[0.33333333, 0.33333333, 0.33333333, 0.33333333, 0.33333333,
0.33333333],
[0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,
0.16666667],
[0.16666667, 0.16666667, 0.16666667, 0.16666667, 0.16666667,
0.16666667]]))
#chi is the first value i.e. 24 and p_vals is second value i.e. 0.24232
</code></pre>
<p>对于上面的一对行索引,可以正常工作,只需替换<code>USC</code>和<code>UCLA</code></p>
<p>如果要对所有行执行此操作,可以在索引值上使用<code>itertools</code>中的<code>combinations</code>进行循环:</p>
<pre><code>from itertools import combinations
for left, right in combinations(df.index.tolist(), 2):
data_crosstab = pd.crosstab(df.loc[left], df.loc[right])
#rest of the code
</code></pre>