如何解决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)
这样做的最好方法是什么?
解决方法
您可以将max
和DataFrame.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 举报,一经查实,本站将立刻删除。