Pandas 如何计算数据帧中不同大小子集的平均值?

Pandas 如何计算数据帧中不同大小子集的平均值?,pandas,dataframe,subset,mean,Pandas,Dataframe,Subset,Mean,计算数据帧中每个唯一行子集的特定列的平均值。在下面的示例中,每个子集直到1出现在列“Flag”中,即(54+34+78+91+29)/5=57.2和(81+44+61)/3=62.0 当前无法根据特定列条件计算不同大小的滚动子集 >>>作为pd进口熊猫 >>>df=pd.DataFrame({“Indx”:[1,2,3,4,5,6,7,8,9,10],“Units”:[54,34,78,91,29,81,44,61,73,19],“Flag”:[0,0,0,0,1,0,0,1]) >>>df

计算数据帧中每个唯一行子集的特定列的平均值。在下面的示例中,每个子集直到1出现在列“Flag”中,即(54+34+78+91+29)/5=57.2和(81+44+61)/3=62.0

当前无法根据特定列条件计算不同大小的滚动子集


>>>作为pd进口熊猫
>>>df=pd.DataFrame({“Indx”:[1,2,3,4,5,6,7,8,9,10],“Units”:[54,34,78,91,29,81,44,61,73,19],“Flag”:[0,0,0,0,1,0,0,1])
>>>df
Indx单位标志
0     1     54     0
1     2     34     0
2     3     78     0
3     4     91     0
4     5     29     1
5     6     81     0
6     7     44     0
7     8     61     1
8     9     73     0
9    10     19     1
#期望输出
>>>df
Indx单位标志平均值
0     1     54     0  57.2
1     2     34     0  57.2
2     3     78     0  57.2
3     4     91     0  57.2
4     5     29     1  57.2
5     6     81     0  62.0
6     7     44     0  62.0
7     8     61     1  62.0
8     9     73     0  46.0
9    10     19     0  46.0

使用
cumsum
创建组键,然后使用
transform

df['Units'].groupby(df.Flag.iloc[::-1].cumsum()).transform('mean')
0    57.2
1    57.2
2    57.2
3    57.2
4    57.2
5    62.0
6    62.0
7    62.0
8    46.0
9    46.0
Name: Units, dtype: float64

#df['new']=df['Units'].groupby(df.Flag.iloc[::-1].cumsum()).transform('mean')
我认为最短的解决方案是:

您甚至不需要使用iloc,因为df.Flag[:-1]检索标志
列的顺序相反。

翻转的
:-1
非常聪明,很好的一个+1
df['avg'] = df.groupby(df.Flag[::-1].cumsum()).Units.transform('mean')