numpy Pandas根据旗帜值按累计总和、平均值、中位数分组

pgccezyw  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(132)

我需要根据指标的值计算累计计算(总和、平均值、中位数等)
它应该计算所有的假指示符,并将其打印在真指示符的旁边。则应重置计算值并从TRUE开始,直到指示器再次出现TRUE。
输入 Dataframe
Amount|指标

10|False
20|False
5|True
8|False
4|False
6|True
输出将是
数量|指标|总和|平均
-|-|
10|FALSE||
20|False||
5|True|30|15
8|FALSE||
4|FALSE||
6|True|17|5.6
我尝试将Groupby与Cumsum()一起使用,并使用Indicator作为组,但还没有成功。

zkure5ic

zkure5ic1#

只使用一个Groupby就可以一气呵成:

df[["Sum", "Mean"]] = np.NaN
df.loc[df.Indicator, ["Sum", "Mean"]] = (df.groupby(df.Indicator.cumsum())
                                         .agg({"Amount": ["sum", "mean"]})
                                         .shift(1).iloc[1:].values)
z5btuh9x

z5btuh9x2#

让我们使用Indicator列的cumsum作为组密钥,得到Amount列的累加和和大小

m = df['Indicator'].cumsum()

df['Sum'] = df.groupby(m)['Amount'].cumsum().shift().where(df['Indicator'])
df['Mean'] = df['Sum'].shift(-1).div(df.groupby(m)['Amount'].transform('size')).shift()
print(df)

   Amount  Indicator   Sum       Mean
0      10      False   NaN        NaN
1      20      False   NaN        NaN
2       5       True  30.0  15.000000
3       8      False   NaN        NaN
4       4      False   NaN        NaN
5       6       True  17.0   5.666667

相关问题