我有以下数据帧:
df =
min(arc) max(arc) min(gbm)_p1 max(gbm)_p1
1 10 2 5
0 11 1 6
如何计算
df
和max
列对之间的差异?预期结果:
diff(arc) diff(gbm)_p1
9 3
11 5
我假设
min
应该用于按行计算差异,但如何创建列对?在我的例子中,我应该只计算具有相同名称的列之间的差异,例如apply(lambda x: ...)
或...(arc)
。请注意,...(gbm)_p1
和min
前缀总是出现在列名的开头。 最佳答案
我们的想法是通过DataFrame
和DataFrame.filter
来过滤这两个regex
s,其中^
是字符串的开始,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 5