查找最接近pandas数据帧平均值的列



我有一个特定的panda数据帧,例如

A.1 A.2 A.3 A.4 B.1 B.2 B.3
0 1   5   8   10  ... 
1 2   4   6   7   ... 
2 3   3   6   1   ... 

我想按行计算pandas数据帧的平均列,仅适用于包含"A"的列,例如:

A.avg
6
4.75
3.25

然后找到‘A’的哪一列与平均值最接近(最小均方根误差(,并获得其列名(此处为A.2(

第一部分很简单,但我很难理解的第二部分

编辑:这是我查找最大列id的方法(我有一个子字符串列表(如a、B、C等(,并对数据帧执行扫描(:

max_id_per_substring = [
self.table[[column for column in list(self.table) if substring in column]].idxmax(axis=1).iloc[-1]  for substring in self.all_substrings]

在可以使用广播的numpy中进行计算是最方便的。因此,我们首先获取像A.这样的所有列,并将它们转换为numpy数组。为了利用广播对转置后的数据进行平均值的减法运算,将结果平方,并找到最小和的列数。

import pandas as pd
df = pd.DataFrame({'A.1':[1,2,3], 'A.2':[5,4,3], 'A.3':[8,6,6], 'A.4':[10,7,1], 'B.1':[0,0,0]})
arr = df.filter(like='A.').to_numpy().T
col_number = ((arr - arr.mean(0))**2).sum(1).argmin()
print(df.filter(like='A.').columns[col_number])
#A.2

最新更新