我有以下数据帧:

df =
min(arc)  max(arc)  min(gbm)_p1  max(gbm)_p1
1         10        2            5
0         11        1            6

如何计算dfmax列对之间的差异?
预期结果:
diff(arc)  diff(gbm)_p1
9          3
11         5

我假设min应该用于按行计算差异,但如何创建列对?在我的例子中,我应该只计算具有相同名称的列之间的差异,例如apply(lambda x: ...)...(arc)。请注意,...(gbm)_p1min前缀总是出现在列名的开头。

最佳答案

我们的想法是通过DataFrameDataFrame.filter来过滤这两个regexs,其中^是字符串的开始,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

09-25 22:24
查看更多