2016-09-22 176 views
0

我正在使用Pandas来构造和处理数据。 这是我的数据框:循环组Pandas Dataframe并获取总数/计数

DataFrame

这是使我能够得到这个数据帧代码:

(data[['time_bucket', 'beginning_time', 'bitrate', 2, 3]].groupby(['time_bucket', 'beginning_time', 2, 3])).aggregate(np.mean) 

现在我想有总和(理想情况下,总和与计数)我的'比特率'分组在同一个time_bucket中。例如,对于第一个time_bucket((2016-07-08 02:00:00,2016-07-08 02:05:00)),所有情况下的“比特率”必须为93750000,总数为25,计数为25, 。

我这样做:

data[['time_bucket', 'bitrate']].groupby(['time_bucket']).agg(['sum', 'count']) 

这是结果:

enter image description here

但我真的希望有一个数据帧我的所有数据

我可以。做一个简单的l超过'time_bucket'并应用计算所有比特率之和的函数? 任何想法?谢谢 !

+0

请提供一个小的代码片段,提供您的问题所需的数据框(或它们的一个小近似值)。这些图像不能加载到Python中。 –

回答

1

我认为你需要merge,但需要DataFramesindexes相同的水平,所以使用reset_index。最后得到原Multiindex通过set_index

data = pd.DataFrame({'A':[1,1,1,1,1,1], 
        'B':[4,4,4,5,5,5], 
        'C':[3,3,3,1,1,1], 
        'D':[1,3,1,3,1,3], 
        'E':[5,3,6,5,7,1]}) 

print (data) 
    A B C D E 
0 1 4 3 1 5 
1 1 4 3 3 3 
2 1 4 3 1 6 
3 1 5 1 3 5 
4 1 5 1 1 7 
5 1 5 1 3 1 
df1 = data[['A', 'B', 'C', 'D','E']].groupby(['A', 'B', 'C', 'D']).aggregate(np.mean) 
print (df1) 
      E 
A B C D  
1 4 3 1 5.5 
     3 3.0 
    5 1 1 7.0 
     3 3.0 

df2 = data[['A', 'C']].groupby(['A'])['C'].agg(['sum', 'count']) 
print (df2) 
    sum count 
A    
1 12  6 

print (pd.merge(df1.reset_index(['B','C','D']), df2, left_index=True, right_index=True) 
     .set_index(['B','C','D'], append=True)) 

      E sum count 
A B C D     
1 4 3 1 5.5 12  6 
     3 3.0 12  6 
    5 1 1 7.0 12  6 
     3 3.0 12  6 

我尝试另一种解决方案,从df1得到输出,但这种聚集所以不可能得到正确的数据。如果总和水平为C,则会得到8而不是12

+0

你能帮我做这个吗? :) http://stackoverflow.com/questions/39691671/resampling-timeseries-with-a-given-timedelta – DataAddicted

+0

是的,请参阅我的解决方案。 – jezrael