微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas 数据框根据名称对列进行分组并应用函数

如何解决pandas 数据框根据名称对列进行分组并应用函数

我有一个数据框:

df = [A   B   C   D  E_p0   E_p1   E_p2    K_p0  K_p1  K_2  
      a   2   r   4   3       6     1       9     5     1
      e   g   1   d   5       8     2       7     1     4]

而且我想根据前缀对列进行分组,并通过函数(例如均值或最大值或均方根)聚合它们。 因此,例如,如果我的函数为 max,则输出为:

df = [A   B   C   D   E    K  
      a   2   r   4   6    9  
      e   g   1   d   8    7   ]

解决方法

您可以将没有分隔符的列转换为索引,然后使用 lambda 函数对每列使用聚合函数(如 max)进行分组:

m = df.columns.str.contains('_')

df = (df.set_index(df.columns[~m].tolist())
        .groupby(lambda x: x.split('_')[0],axis=1)
        .max()
        .reset_index())
print (df)
   A  B  C  D  E  K
0  a  2  r  4  6  9
1  e  g  1  d  8  7

自定义函数的解决方案:

def rms(x):
    return np.sqrt(np.sum(x**2,axis=1)/len(x.columns))

m = df.columns.str.contains('_')

df1 = (df.set_index(df.columns[~m].tolist())
        .groupby(lambda x: x.split('_')[0],axis=1)
        .agg(rms)
        .reset_index())
print (df1)
   A  B  C  D         E         K
0  a  2  r  4  3.915780  5.972158
1  e  g  1  d  5.567764  4.690416

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。