首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据条件创建成对的列名?

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

Stack Overflow用户
提问于 2019-09-13 14:45:41
回答 1查看 90关注 0票数 3

我有以下DataFrame df

代码语言:javascript
复制
df =
min(arc)  max(arc)  min(gbm)_p1  max(gbm)_p1
1         10        2            5
0         11        1            6

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

预期结果:

代码语言:javascript
复制
diff(arc)  diff(gbm)_p1
9          3
11         5

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-13 14:51:59

我的想法是用regex过滤这两个列,其中^是字符串的开始,rename列,所以可以减去,因为在这两个列中有相同的列名:

代码语言:javascript
复制
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

编辑:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57918546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档