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

Python Pandas对列值应用函数基于列名称模式

如何解决Python Pandas对列值应用函数基于列名称模式

我有一个数据框:

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.groupby按列使用,将axis=1和lambda函数fors值放在第一个_之前(如果存在):

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

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