基于表中条件的列值之和

2024-09-28 01:29:38 发布

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

daychange   SS
0.017065    0
-0.009259   100
0.031542    0
-0.004530   0
0.000709    0
0.004970    100
-0.021900   0
0.003611    0

我有两列,如果SS=100,我想计算下一个5‘daychange’的总和

我现在正在使用以下功能,但它的工作方式与我希望的不完全相同:

df['total'] = df.loc[df['SS'] == 100,['daychange']].sum(axis=1) 

Tags: 功能df方式ssloctotalsum总和
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:38

由于pandas 1.1,您可以创建一个forward rolling window并选择要包含在数据帧中的行。由于不同的参数,我的笔记本内核被终止:小心使用

indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=5)
df['total'] = df.daychange.rolling(indexer, min_periods=1).sum()[df.SS == 100]
df

输出:

   daychange   SS     total
0   0.017065    0       NaN
1  -0.009259  100  0.023432
2   0.031542    0       NaN
3  -0.004530    0       NaN
4   0.000709    0       NaN
5   0.004970  100 -0.013319
6  -0.021900    0       NaN
7   0.003611    0       NaN

从总和中排除以SS == 100开头的行

这将是带有SS == 100的行之后的下一行。由于所有行都已计算,因此可以使用

df['total'] = df.daychange.rolling(indexer, min_periods=1).sum().shift(-1)[df.SS == 100]
df

输出:

   daychange   SS     total
0   0.017065    0       NaN
1  -0.009259  100  0.010791
2   0.031542    0       NaN
3  -0.004530    0       NaN
4   0.000709    0       NaN
5   0.004970  100 -0.018289
6  -0.021900    0       NaN
7   0.003611    0       NaN

使用选定行的索引的慢黑客解决方案

这感觉像一个黑客,但工作,避免计算不必要的滚动值

df['next5sum'] = df[df.SS == 100].index.to_series().apply(lambda x: df.daychange.iloc[x: x + 5].sum())
df

输出:

   daychange   SS  next5sum
0   0.017065    0       NaN
1  -0.009259  100  0.023432
2   0.031542    0       NaN
3  -0.004530    0       NaN
4   0.000709    0       NaN
5   0.004970  100 -0.013319
6  -0.021900    0       NaN
7   0.003611    0       NaN

对于接下来五行的总和(不包括带SS == 100的行),您可以调整切片或移位序列

df['next5sum'] = df[df.SS == 100].index.to_series().apply(lambda x: df.daychange.iloc[x + 1: x + 6].sum())
# df['next5sum'] = df[df.SS == 100].index.to_series().apply(lambda x: df.daychange.shift(-1).iloc[x: x + 5].sum())

df

输出:

   daychange   SS  next5sum
0   0.017065    0       NaN
1  -0.009259  100  0.010791
2   0.031542    0       NaN
3  -0.004530    0       NaN
4   0.000709    0       NaN
5   0.004970  100 -0.018289
6  -0.021900    0       NaN
7   0.003611    0       NaN
7   0.003611    0       NaN

相关问题 更多 >

    热门问题