我是Python Pandas的新手,正在寻求有关如何解决问题的建议。我有一个很大的数据框,我想一次将行的列相加50,以形成新的行,其中一列是时间序列的平均值。我的措辞很差,但这是一个例子:
说我有这个数据帧,其中A是一个递增的时间序列:
A B C D
0 1 23 45 21
1 2 34 23 65
2 3 56 84 35
3 4 67 20 70
我想用两行“折叠”行,使它们看起来像这样,对B,C和D列求和,而A列为均值:
A B C D
0 1.5 57 68 86
1 3.5 123 104 110
我已经研究过使用cut()和groupby()了,但是这些似乎都不符合我的要求。
编辑:对于任何也在寻找此内容的人,我发现将其作为基于索引值的重采样最为简单。解决我特定问题的方法是:
df = df.groupby(df.index // 50).sum()
然后我将所需的列除以50得到平均值。
答案 0 :(得分:0)
您只需要将groupby
的关键列添加到与您的需求相对应的数据框中。
您要在此处将每个ncollapsed
(一些数字)行折叠在一起,因此您可以添加从范围的整数除以ncollapsed
获得的列,以使每个{{1 }}行。
ncollapsed
结果:
import numpy as np
import pandas as pd
# some random data
df = pd.DataFrame(np.random.randint(low=0, high=100, size=(5,5)))
ncollapsed = 2
# add column with same values each 'ncollapsed' consecutive rows
df["index_collapsed"] = np.arange(len(df)) // ncollapsed
# Now collapse using groupby and the aggregation you want
df.groupby("index_collapsed").mean()
注意:最后一行尚未折叠,因为行数不是 0 1 2 3 4
0 73 95 93 8 73
1 27 68 77 21 90
2 89 32 65 73 49
3 25 79 11 73 66
4 81 72 33 66 16
0 1 2 3 4
index_collapsed
0 50.0 81.5 85.0 14.5 81.5
1 57.0 55.5 38.0 73.0 57.5
2 81.0 72.0 33.0 66.0 16.0
的倍数