我有以下数据框:
A X
Time
1 a 10
2 b 17
3 b 20
4 c 21
5 c 36
6 d 40
由 pd.DataFrame({'Time': [1, 2, 3, 4, 5, 6], 'A': ['a', 'b', 'b', 'c ', 'c', 'd'], 'X': [10, 17, 20, 21, 36, 40]}).set_index('时间')
期望的输出是:
Time Difference
0 2 7
1 4 1
2 6 4
第一个差分 1
是从 20
中减去 21
的结果:(第一个 "c"
值- 最后一个 “b”
值)。
我也对 numPy
转换持开放态度。
最佳答案
按 GroupBy.agg
聚合与 GroupBy.first
,
GroupBy.last
然后减去 last
列的移位值,并按位置省略第一行:
df = df.reset_index()
df1 = df.groupby('A',as_index=False, sort=False).agg(first=('X', 'first'),
last=('X','last'),
Time=('Time','first'))
df1['Difference'] = df1['first'].sub(df1['last'].shift(fill_value=0))
df1 = df1[['Time','Difference']].iloc[1:].reset_index(drop=True)
print (df1)
Time Difference
0 2 7
1 4 1
2 6 4
关于pandas - 从不同组中减去值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73825153/