擅长:python、mysql、java
<p>我将首先构建一系列由原始列索引的最终名称:</p>
<pre><code>names = pd.Series(['_'.join(i.split('_')[:-1]) for i in df.columns[3:]],
index = df.columns[3:])
</code></pre>
<p>然后我会用它来询问轴1上的groupby的平均值:</p>
<pre><code>tmp = df.iloc[:, 3:].groupby(names, axis=1).agg('mean')
</code></pre>
<p>它提供了一个与原始数据帧相似的索引新数据帧,并具有平均列:</p>
<pre><code> gh_00hr_bio gh_06hr_bio
0 2.333333 1.0
1 6.000000 2.0
</code></pre>
<p>然后,您可以将其水平连接到第一个数据帧或其前3列:</p>
<pre><code>result = pd.concat([df.iloc[:, :3], tmp], axis=1)
</code></pre>
<p>要获得:</p>
<pre><code> name x y gh_00hr_bio gh_06hr_bio
0 gene1 x y 2.333333 1.0
1 gene2 x y 6.000000 2.0
</code></pre>