<p>这里有一种使用<code>shift</code>的不同方法。它实质上是减去前面的数字。它假定数据帧已经处于正确的顺序(如果不是,请先使用<code>DataFrame.sort_values</code>)。我认为这是更好的,因为它提供了一个到位的一个班轮。在</p>
<pre><code>df = pd.DataFrame(
data=[
['01-01-2018', 'Jakob', 5, 10],
['01-01-2018', 'Adomas', 10, 20],
['01-01-2018', 'Thomas', 15, 30],
['01-02-2018', 'Jakob', 50, 30],
['01-02-2018', 'Adomas', 100, 40],
['01-02-2018', 'Thomas', 150, 65],
['01-03-2018', 'Jakob', 60, 30],
['01-03-2018', 'Adomas', 120, 45],
['01-03-2018', 'Thomas', 200, 75]
],
columns=['Date', 'Sales rep', 'item A', 'item B']
)
group_by_columns = ['Sales rep']
cum_columns = ['item A', 'item B']
df[cum_columns] -= df.groupby(group_by_columns)[cum_columns].shift(1).fillna(0)
print(df)
Out:
Date Sales rep item A item B
0 01-01-2018 Jakob 5.0 10.0
1 01-01-2018 Adomas 10.0 20.0
2 01-01-2018 Thomas 15.0 30.0
3 01-02-2018 Jakob 45.0 20.0
4 01-02-2018 Adomas 90.0 20.0
5 01-02-2018 Thomas 135.0 35.0
6 01-03-2018 Jakob 10.0 0.0
7 01-03-2018 Adomas 20.0 5.0
8 01-03-2018 Thomas 50.0 10.0
</code></pre>