首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python列差异

Python列差异
EN

Stack Overflow用户
提问于 2018-07-22 11:13:33
回答 3查看 891关注 0票数 0

我需要创建一个列来计算另一个列的元素之间的差异:

代码语言:javascript
运行
复制
Column A    Computed Column
10           blank  # nothing to compute for first record
9            1  # = 10-9
7            2  # = 9-7
4            3  # = 7-4

我假设这是一个lambda函数,但是我不确定如何引用'Column A‘中的元素。

您能提供的任何帮助/指导都将是非常好的-谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-22 11:29:27

您可以通过移动列来执行此操作。

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

dict1 = {'A': [10,9,7,4]}
df = pd.DataFrame.from_dict(dict1)

df['Computed'] = df['A'].shift() - df['A']
print(df)

给予

代码语言:javascript
运行
复制
    A  Computed
0  10       NaN
1   9       1.0
2   7       2.0
3   4       3.0

编辑: OP将他的需求扩展到多列

代码语言:javascript
运行
复制
dict1 = {'A': [10,9,7,4], 'B': [10,9,7,4], 'C': [10,9,7,4]}
df = pd.DataFrame.from_dict(dict1)

columns_to_update = ['A', 'B']
for col in columns_to_update:
    df['Computed'+col] = df[col].shift() - df[col]
print(df)

通过使用columns_to_update,您可以选择所需的列。

代码语言:javascript
运行
复制
    A   B   C  ComputedA  ComputedB
0  10  10  10        NaN        NaN
1   9   9   9        1.0        1.0
2   7   7   7        2.0        2.0
3   4   4   4        3.0        3.0
票数 2
EN

Stack Overflow用户

发布于 2018-07-22 11:33:42

我只会这么做:

代码语言:javascript
运行
复制
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df['B'] = abs(df['A'].diff())

使用abs()的原因是因为diff()计算current - previous之间的差异,而您需要previous - current。这个方法已经内置于Series类中,因此使用abs()将获得正确的结果,无论采用哪种方法的绝对值。

要支持以下操作:

代码语言:javascript
运行
复制
import pandas as pd
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df['B'] = abs(df['A'].diff())
>>> df
# Output
    A    B
0  10  NaN
1   9  1.0
2   7  2.0
3   4  3.0
df2 = pd.DataFrame(data=[10,4,7,9], columns=['A'])
df2['B'] = abs(df2['A'].diff())
>>> df2
# Output
    A    B
0  10  NaN
1   4  6.0
2   7  3.0
3   9  2.0

想要比@cosmic_inquiry的解决方案更好:

代码语言:javascript
运行
复制
import pandas as pd
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df2 = pd.DataFrame(data=[10,4,7,9], columns=['A'])
df['B'] = df['A'].diff() * -1
df2['B'] = df2['A'].diff() * -1
>>> df
# Output:
    A    B
0  10  NaN
1   9  1.0
2   7  2.0
3   4  3.0
>>> df2
# Output:
    A    B
0  10  NaN
1   4  6.0
2   7 -3.0
3   9 -2.0
票数 0
EN

Stack Overflow用户

发布于 2018-07-22 11:35:11

使用diff

代码语言:javascript
运行
复制
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df['B'] = df.A.diff(-1).shift(1)

输出:

代码语言:javascript
运行
复制
df
Out[140]: 
    A    B
0  10  NaN
1   9  1.0
2   7  2.0
3   4  3.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51461728

复制
相关文章

相似问题

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