GroupBy中的Pandas累计总和

2024-10-01 15:49:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有符号的时间序列数据,以及它们在特定时间的各自值。在

index,symbol,value
01:00,A,10
01:00,B,15
01:01,A,15
01:01,B,25
01:02,A,30
01:02,B,45

现在我想创建一个第4列,它对每个符号都有时间序列的累积值,但是从每个累计行中,每个符号的第一行值将分别减去

^{pr2}$

我知道怎样做一般的累加和

df = df.reset_index().sort_values(['index','symbol'])
df['cumlativesum'] = df.groupby('symbol')['value'].cumsum()
df = df.set_index('index')

但我要从所有的累计和中扣除第0行的值吗?在


Tags: 数据dfindexvalue时间符号序列symbol
3条回答

您可以减去transform函数中每个组的第一个值(用.iat[0]提取):

df['cumlativesum'] = df.groupby('symbol')['value'].transform(lambda g: g.cumsum()-g.iat[0])
df = df.set_index('index')

df
#      symbol   value   cumlativesum
#index          
#01:00      A      10          0
#01:00      B      15          0
#01:01      A      15         15
#01:01      B      25         25
#01:02      A      30         45
#01:02      B      45         70
df.groupby('sy').val.apply(lambda x : x.cumsum()-x.values.tolist()[0])
Out[907]: 
0     0
1     0
2    15
3    25
4    45
5    70
Name: val, dtype: int64

^{}与带有^{}的自定义函数一起使用,并减去^{}选择的第一个值:

df['adjustedCumulativeSum']=df.groupby('symbol')['value'].apply(lambda x:x.cumsum()-x.iat[0])
print (df)
   index symbol  value  adjustedCumulativeSum
0  01:00      A     10                      0
1  01:00      B     15                      0
2  01:01      A     15                     15
3  01:01      B     25                     25
4  01:02      A     30                     45
5  01:02      B     45                     70

相关问题 更多 >

    热门问题