我正在使用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作为计数,对于所有情况&#39 ;比特率'
我这样做了:
data[['time_bucket', 'bitrate']].groupby(['time_bucket']).agg(['sum', 'count'])
这就是结果:
但我真的想把所有数据放在一个DataFrame中。
我可以做一个简单的循环吗?time_bucket'并应用计算所有比特率之和的函数? 有任何想法吗 ?谢谢!
答案 0 :(得分:1)
我认为您需要merge
,但需要 static void Main(string[] args)
{
Initialise();
if (!RunSilently)
FireUpGui();
else
RunConsoleApp(); // not so relevant to the answer
}
private static void FireUpGui()
{
Console.SetWindowSize(80, 5);
Thread t = new Thread(Start_Wpf);
t.SetApartmentState(ApartmentState.STA);
t.Start();
}
static App WpfApp;
static void Start_Wpf()
{
WpfApp = new App(); // my WPF App
WpfApp.Run();
}
两个indexes
的相同级别,因此请使用reset_index
。最后通过set_index
获得原始DataFrames
:
Multiindex
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
。