Python pandas 对列值应用函数(基于列名称模式)

Python pandas apply function on columns value (base on columns names patern)

我有一个数据框:

a b  val1_b1 val1_b2 val2_b1 val2_v2
1 2    5       9        4      6

我想按列组取最大值,所以数据框将是:

a b  val1  val2 
1 2    9     6  

或 RMS:

a b       val1    val2
1 2    sqrt(106)   sqrt(52)   

最好的方法是什么?

您可以按列使用 maxDataFrame.groupbyaxis=1 和 lambda 函数用于第一个 _(如果存在)之前的值:

df1 = df.groupby(lambda x: x.split('_')[0], axis=1).max()
print (df1)
   a  b  val1  val2
0  1  2     9     6

编辑 RMS 使用:

df2 = df.iloc[:, :2]
df3 = df.iloc[:, 2:].pow(2).groupby(lambda x: x.split('_')[0], axis=1).sum().pow(1./2)

#alternative
df3 = (df.iloc[:, 2:].groupby(lambda x: x.split('_')[0], axis=1)
         .apply(lambda a: pd.Series(np.linalg.norm(a))))

df4 = pd.concat([df2, df3], axis=1)
print (df4)

   a  b      val1      val2
0  1  2  10.29563  7.211103