我需要创建一个列来计算另一个列的元素之间的差异:
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‘中的元素。
您能提供的任何帮助/指导都将是非常好的-谢谢!
发布于 2018-07-22 11:29:27
您可以通过移动列来执行此操作。
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)
给予
A Computed
0 10 NaN
1 9 1.0
2 7 2.0
3 4 3.0
编辑: OP将他的需求扩展到多列
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,您可以选择所需的列。
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
发布于 2018-07-22 11:33:42
我只会这么做:
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df['B'] = abs(df['A'].diff())
使用abs()
的原因是因为diff()
计算current - previous
之间的差异,而您需要previous - current
。这个方法已经内置于Series
类中,因此使用abs()
将获得正确的结果,无论采用哪种方法的绝对值。
要支持以下操作:
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的解决方案更好:
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
发布于 2018-07-22 11:35:11
使用diff。
df = pd.DataFrame(data=[10,9,7,4], columns=['A'])
df['B'] = df.A.diff(-1).shift(1)
输出:
df
Out[140]:
A B
0 10 NaN
1 9 1.0
2 7 2.0
3 4 3.0
https://stackoverflow.com/questions/51461728
复制相似问题