<p>你似乎把事情弄得更复杂了。<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">^{<cd1>}</a>返回一个<a href="https://pandas.pydata.org/pandas-docs/stable/reference/groupby.html" rel="nofollow noreferrer">^{<cd2>}</a>对象,该对象具有所需的所有属性,等等。不需要创建多余的自定义词典。你知道吗</p>
<p>例如,从</p>
<pre><code>groups = mmLog.groupby('Experiment')
</code></pre>
<p>现在<code>groups.get_group('SpontaneousControl147')</code>将拥有控制组的所有元素:</p>
<pre><code>>>> control = groups.get_group('SpontaneousControl147')['Logmm']
>>> control
38072 0.013685
38073 0.034702
38074 0.008993
Name: Logmm, dtype: float64
</code></pre>
<p>或者,您可以使用<code>groups['logmm']</code>只关注您关心的列,它将返回一个<code>SeriesGroupBy</code>对象,您可以从该对象获取控制数据:</p>
<pre><code>control = groups['Logmm'].get_group('SpontaneousControl147')
</code></pre>
<p>在这两种情况下,<code>groups</code>支持直接迭代和<code>apply</code>方法。如果不需要汇总结果:</p>
<pre><code>for key, subset in groups:
if key == 'SpontaneousControl147':
continue
ttest(control, subset['Logmm'])
</code></pre>
<p>如果要构建<code>Series</code>个ttest值:</p>
<pre><code>groups['Logmm'].apply(lambda data: ttest(control, data))
</code></pre>
<p>或者</p>
<pre><code>groups.apply(lambda df: ttest(control, df['Logmm']))
</code></pre>
<p>以下是两种TL;DR版本:</p>
<ol>
<li><p>使用完整的<code>DataFrameGroupBy</code>:</p>
<pre><code>groups = mmLog.groupby('Experiment')
control = groups.get_group('SpontaneousControl147')['Logmm']
result = groups.apply(lambda df: ttest(control, df['Logmm']))
</code></pre></li>
<li><p>对感兴趣的列使用<code>SeriesGroupBy</code>:</p>
<pre><code>groups = mmLog.groupby('Experiment')['Logmm']
control = groups.get_group('SpontaneousControl147')
result = groups.apply(lamda s: ttest(control, s))
</code></pre></li>
</ol>