我在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行。
感谢
答案 0 :(得分:2)
IIUC,让我们使用groupby
和stack
进行尝试:
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