我有data
这样的话。
我想使用pandas
shift
并在column
之间减去值。这是我正在使用的code
。
df['Difference'] = (df['A'] - df['A'].shift(-1))
这是我得到的output
(如预期的那样)。
如果pandas
不同,如何阻止columns
在index ( Id)
之间减去。我只想在index
相同的情况下减去。我的欲望输出是这样的。使用df.shift(-1, axis = 0)
也没有解决。
有什么建议吗?
答案 0 :(得分:6)
您可以先groupby
'id'
:
In [156]: df.assign(
...: new_col=df.groupby('id').diff(-1)
...: )
Out[156]:
A id new_col
0 6 1 2.0
1 4 1 -7.0
2 11 1 NaN
3 7 2 -2.0
4 9 2 -4.0
5 13 2 NaN
答案 1 :(得分:3)
你可以快速做到这一点肮脏的np.where
import pandas as pd
import numpy as np
# Create Example Data
df = pd.DataFrame({
'Id':[1, 1, 1, 2, 2, 2],
'A': [6, 4, 11, 7, 9, 12]
})
# Where
df['Difference'] = np.where(
# The Id's are the same
df['Id'] == df['Id'].shift(-1),
# Take the difference
df['A'] - df['A'].shift(-1),
# Else, np.NaN
np.NaN
)
输出:
A Id Difference
0 6 1 2.0
1 4 1 -7.0
2 11 1 NaN
3 7 2 -2.0
4 9 2 -3.0
5 12 2 NaN