<p>我有一个<code>df =</code></p>
<pre><code> statistics s_values
year
1999 cigarette use 100
1999 cellphone use 310
1999 internet use 101
1999 alcohol use 100
1999 soda use 215
2000 cigarette use 315
2000 cellphone use 317
2000 internet use 325
2000 alcohol use 108
2000 soda use 200
2001 cigarette use 122
2001 cellphone use 311
2001 internet use 112
2001 alcohol use 144
2001 soda use 689
</code></pre>
<p>我根据<code>year</code>{<cd3>}和<code>statistics</code>{<cd5>}计算了最大值、最小值和平均值</p>
<p>我想在输出结果如下所示的数据框中插入mean、max和min作为列</p>
<p>我的期望输出:</p>
<pre><code> statistics s_values mean min max
year
1999 alcohol use 100.0 104.0 100.0 108.0
1999 cellphone use 310.0 313.5 310.0 317.0
1999 cigarette use 100.0 207.5 100.0 315.0
1999 internet use 101.0 213.0 101.0 325.0
1999 soda use 215.0 207.5 200.0 215.0
2000 alcohol use 108.0 104.0 100.0 108.0
2000 cellphone use 317.0 313.5 310.0 317.0
2000 cigarette use 315.0 207.5 100.0 315.0
2000 internet use 325.0 213.0 101.0 325.0
2000 soda use 200.0 207.5 200.0 215.0
2001 alcohol use 144.0 104.0 100.0 108.0
2001 cellphone use 311.0 313.5 310.0 317.0
2001 cigarette use 122.0 207.5 100.0 315.0
2001 internet use 112.0 213.0 101.0 325.0
2001 soda use 689.0 207.5 200.0 215.0
</code></pre>
<p>我尝试执行以下操作,但列中的值都是<code>NaN</code></p>
<pre><code>gen_mean = df.groupby('statistics').mean()
gen_min = df.groupby('statistics').min()
gen_max = df.groupby('statistics').max()
df.insert(2, 'Gen Avg', gen_mean)
df.insert(3, 'Gen Max', gen_max)
df.insert(4, 'Gen Min', gen_min)
</code></pre>
<p>多谢各位</p>
<p><code>groupby(...).mean()</code>将返回一个数据帧,其中的行对应于组。您需要<code>transform</code>:</p>
<pre><code>df['mean'] = df.groupby('statistics')['s_values'].transform('mean')
# I hope you get the idea how to get min/max
</code></pre>