Pandas 如何计算数据帧中不同大小子集的平均值?
计算数据帧中每个唯一行子集的特定列的平均值。在下面的示例中,每个子集直到1出现在列“Flag”中,即(54+34+78+91+29)/5=57.2和(81+44+61)/3=62.0 当前无法根据特定列条件计算不同大小的滚动子集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
>>>作为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')