如何根据条件创建成对的列名?

时间:2019-09-13 06:45:40

标签: python pandas

我有以下DataFrame df

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

如何计算成对的maxmin列之间的差异?

预期结果:

diff(arc)  diff(gbm)_p1
9          3
11         5

我假设应该使用apply(lambda x: ...)逐行计算差异,但是如何创建成对的列呢?就我而言,我应该只计算名称相同的列之间的差异,例如...(arc)...(gbm)_p1。请注意,minmax前缀总是出现在列名的开头。

1 个答案:

答案 0 :(得分:1)

想法用DataFrameDataFrame.filter过滤两个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             5