首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向现有df中添加差异列

向现有df中添加差异列
EN

Stack Overflow用户
提问于 2018-01-20 01:17:38
回答 3查看 182关注 0票数 0

我的目标是添加显示前几列之间差异的列。

df

代码语言:javascript
运行
复制
Name 0  1  2   
A    3  1  0
B    5  4  1

结果:

代码语言:javascript
运行
复制
Name 0  1  2  d1        d2 
A    3  1  0  2 (=3-1)  1 (=1-0)
B    5  4  1  1 (=5-4)  3 (=4-1)

我正在考虑创建一个新的df,以查找计算差异,然后将其添加回原始df,但由于仍然需要使用原始数据,所以它无法工作。有没有更好的方法?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-20 01:38:10

代码语言:javascript
运行
复制
difference = (df.shift(axis=1)-df).dropna(axis=1).add_prefix('d')
pd.concat([df,difference],axis=1)
  • .shift(),将索引向下移动,因此当您减去行时,它们将按照正确的顺序这样做
  • 减去然后重新组合
票数 1
EN

Stack Overflow用户

发布于 2018-01-20 02:37:32

使用diff

代码语言:javascript
运行
复制
df = df.set_index('Name')
df[['d1','d2']] = -df.diff(axis=1).iloc[:, 1:]

代码语言:javascript
运行
复制
df.reset_index()

Name  0  1  2   d1   d2
A     3  1  0  2.0  1.0
B     5  4  1  1.0  3.0
票数 2
EN

Stack Overflow用户

发布于 2018-01-20 03:21:39

我们也可以选择列的第一个列名。最后做减子运算。

代码语言:javascript
运行
复制
df[['d1','d2']] = df[["0", "1"]] - df[["1", "2"]].values

    Name 0  1   2   d1  d2
    A   3   1   0   2   1
    B   5   4   1   1   3

(我们需要.values只提取值并忽略其列名。您可以尝试不使用.values。)

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

https://stackoverflow.com/questions/48351683

复制
相关文章

相似问题

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