擅长:python、mysql、java
<p>使用groupby和apply:</p>
<pre><code>df[(df['Allele1']=='A')|(df['Allele2']=='A')].groupby('Gene_Name').apply(len)
</code></pre>
<p>在您显示的数据帧上</p>
<pre><code>Gene_Name
AA1 1
DSD 2
EE2 2
KAD334 1
dtype: int64
</code></pre>
<p>编辑:
上面的代码只是将所有具有“A”作为等位基因1或等位基因2的行分组,并统计出现的次数。所以呢</p>
<pre><code>AA gets counted as A
AB gets counted as A
BB gets ignored
</code></pre>
<p>使用<code>&</code>而不是<code>|</code>会导致</p>
<pre><code>AA getting counted
AB getting ignored
BB getting ignored
</code></pre>
<p>要获得所有不同组合的计数,您可以按基因<em>和</em>等位基因分组:</p>
<pre><code>df.groupby(by=['Gene_Name', 'Allele1', 'Allele2']).apply(len)
</code></pre>
<p>我在10万个条目的合成数据集上进行了测试,大约需要一秒钟。你知道吗</p>
<p>或者,<code>pd.crosstab</code>,正如@Mark Wang所建议的,也是一个好主意</p>