在Pandas python中聚合数据

时间:2017-06-05 12:12:37

标签: python pandas

我在Pandas中有一个Dataframe dfa包含大约12103行,大约有10列。 现在我将构建一个新的Dataframe dfb,利用dfa,其中应该计算dfb中的每一行,同时考虑到dfa中的前300行,例如:

 value1= dfa['one'].std()
 value2=dfa['one'].max()

获得具有40(12103/300)个条目的dfb。 基本上,dfb的第一行有两列(例如,value1,value2)包含如上计算的值,第二行包含从dfa的第301行开始计算的值到第600行。

感谢

1 个答案:

答案 0 :(得分:2)

IIUC,让我们使用groupbystack进行尝试:

 dfa.groupby(dfa.index // 300).apply(lambda x: pd.Series({'max':x.stack().max(),'std':x.stack().std()}))

MVCE:

dfa = pd.DataFrame(np.random.randint(1,100,(10,10)), columns=list('ABCDEFGHIJ'))
print(dfa)

输出:

    A   B   C   D   E   F   G   H   I   J
0  81  15  57  42  90  25  72  98   6   8
1  44  63  39  29  11   3  80  15  43  47
2  68  97  42  93  19  73  28  25   2  83
3  38  52  65  61  79  82  98  60  76  93
4  68  39  62  48  44  19  44  47  54  26
5  52  93  14  37  48  81   6  20  91  30
6  39  15  22  48  22   8  35  60  72  43
7  13  26  24  74  41  36  92  93  13  85
8   2  46  35  21  92  15  66  19  87  66
9  77  13  15  69   3  81  75  30  64  63

在我的示例中一次创建两行,而不是300行。

dfb = dfa.groupby(dfa.index // 2).apply(lambda x: pd.Series({'max':x.stack().max(),'std':x.stack().std()}))
print(dfb)

输出:

    max        std
0  98.0  29.754080
1  98.0  28.086521
2  93.0  24.203686
3  93.0  27.390884
4  92.0  30.153072