我有以下DataFrame df
df =
min(arc) max(arc) min(gbm)_p1 max(gbm)_p1
1 10 2 5
0 11 1 6如何计算成对的max和min列之间的差异?
预期结果:
diff(arc) diff(gbm)_p1
9 3
11 5我假设应该使用apply(lambda x: ...)逐行计算差异,但是如何创建成对的列呢?在我的例子中,我应该只计算具有相同名称的列之间的差异,例如...(arc)或...(gbm)_p1。请注意,min和max前缀始终出现在列名的开头。
发布于 2019-09-13 14:51:59
我的想法是用regex过滤这两个列,其中^是字符串的开始,rename列,所以可以减去,因为在这两个列中有相同的列名:
df1 = df.filter(regex='^min').rename(columns= lambda x: x.replace('min','diff'))
df2 = df.filter(regex='^max').rename(columns= lambda x: x.replace('max','diff'))
df = df2.sub(df1)
print (df)
diff(arc) diff(gbm)_p1
0 9 3
1 11 5编辑:
print (df)
id min(arc) max(arc) min(gbm)_p1 max(gbm)_p1
0 123 1 10 2 5
1 546 0 11 1 6
df1 = df.filter(regex='^min').rename(columns= lambda x: x.replace('min','diff'))
df2 = df.filter(regex='^max').rename(columns= lambda x: x.replace('max','diff'))
df = df[['id']].join(df2.sub(df1))
print (df)
id diff(arc) diff(gbm)_p1
0 123 9 3
1 546 11 5https://stackoverflow.com/questions/57918546
复制相似问题