计算不同组的每n个元素的平均值

时间:2015-06-15 07:33:14

标签: python sql pandas dataframe

想象一下,我在Ipython中有如下的数据帧:

df = pd.DataFrame({
    'A' : ['1', '1', '1', '1','1', '1', '2', '2', '2', '2', '2', '2'],
    'B' : ['00:00', '00:10', '00:20', '00:30','01:10', '01:20','00:00', '00:10', '00:20', '00:30','01:10', '01:20',],
    'C' : [2,3,4,2,4,5,6,7,1,5,6,4]}
)

enter image description here

我需要的是右侧结果:它是由A组分组然后计算每组的每2(n)行的平均值。我需要为超过4K组的超大规模数据集做这件事。

我尝试使用Pandas,我认为它可能是一个有用的库。

2 个答案:

答案 0 :(得分:1)

此解决方案适用于您的示例

df.groupby(['A',(df.index/2).astype(int)])['C'].mean()

编辑:更多功能的解决方案。独立于指数:

g1 =(df.groupby(['A'])['B'].rank()/2).astype(int)
df.groupby(['A',g1])['C'].mean()

答案 1 :(得分:0)

我不知道熊猫,但这里是Python。

A = ['1', '1', '1', '1','1', '1', '2', '2', '2', '2', '2', '2'],
B = ['00:00', '00:10', '00:20', '00:30','01:10', '01:20','00:00', '00:10', '00:20', '00:30','01:10', '01:20',],
C = [2,3,4,2,4,5,6,7,1,5,6,4]}

return [(a, (b0+b1)/2) for a, b0, b1 in zip(A[::2], B[::2], B[1::2])]

B[::2] slice notation表示"我希望列表中的所有其他元素,从头开始",而B[1::2]表示"我想要每一个其他元素,从B[1]"。

开始

zip function接受多个序列并返回元组的列表(或者,在Python 3中,迭代器),从每个序列中一次获取一个元素。