首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算具有相同基础名称的列之间的差异

计算具有相同基础名称的列之间的差异
EN

Stack Overflow用户
提问于 2021-07-13 13:30:42
回答 1查看 41关注 0票数 0

我有一个df,它比较新旧数据。有办法计算新旧数据之间的差异吗?一般说来,我不想对数据进行排序,而只是比较前缀为"_old“和"_new”的根变量

代码语言:javascript
运行
复制
df
     apple_old      daily    banana_new    banana_tree   banana_old apple_new
0      5             3           4              2           10        6
代码语言:javascript
运行
复制
for x in df.columns:
    if x.endswith("_old") and x.endswith("_new"):
        x = x.dif()

预期输出;为了清晰起见,括号显示在

代码语言:javascript
运行
复制
df_diff
     apple_diff(old-new)         banana_diff(old-new)       
0      -1       (5-6)                      6   (10-4)              
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 13:39:56

让我们尝试创建一个多索引,然后从old中减去new

设置:

代码语言:javascript
运行
复制
import pandas as pd

df = pd.DataFrame({'apple_old': {0: 5}, 'daily': {0: 3}, 'banana_new': {0: 4},
                   'banana_tree': {0: 2}, 'banana_old': {0: 10},
                   'apple_new': {0: 6}})

# Creation of Multi-Index:
df.columns = df.columns.str.rsplit('_', n=1, expand=True).swaplevel(0, 1)
# Subtract old from new:
output_df = (df['old'] - df['new']).add_suffix('_diff')
# Display:
print(output_df)
代码语言:javascript
运行
复制
   apple_diff  banana_diff
0          -1            6

使用str.rsplit和最大分割长度n=1的多索引,因此可以安全地处理多个_

代码语言:javascript
运行
复制
df.columns = df.columns.str.rsplit('_', n=1, expand=True).swaplevel(0, 1)
代码语言:javascript
运行
复制
    old   NaN    new   tree    old   new
  apple daily banana banana banana apple
0     5     3      4      2     10     6

然后选择:

代码语言:javascript
运行
复制
df['old']

   apple  banana
0      5      10

df['new']

   banana  apple
0       4      6

减法将按列对齐。然后add_suffix_diff添加到列中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68363398

复制
相关文章

相似问题

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