gpt4 book ai didi

python-2.7 - 从系列构建新数据框

转载 作者:行者123 更新时间:2023-12-02 04:41:49 25 4
gpt4 key购买 nike

再次破解 older question我的,因为我仍然不明白如何正确地做我想做的事。

我将数据存储在数据框中,需要提取其中的平均 block 以备后用。我的索引是日期时间值,但这不是很重要。不幸的是,我无法执行简单的 df.resample() 操作,因为我需要提取的数据没有固定间隔。示例:

import pandas as pd
from numpy import *

# Build example dataframe
df = pd.DataFrame(data=random.rand(10,3),index=None,columns=list('ABC'))

# Build dummy dataframe to store averaged data from "df"
dummy = pd.DataFrame(columns=df.columns)

# Perform averaging of "df"
for r in xrange(1,10,2):
ave = df.ix[r-1:r+1].mean()

# Store averaged data in dummy dataframe
# Here is where I hit my problem, since ave is a Series
dummy = dummy.append(ave)

我无法将系列附加到数据框。
我可以通过将 ave 转换为字典,然后附加到虚拟来解决:

for r in xrange(1,10,2):
ave = df.ix[r-1:r+1].mean().to_dict()
ave = pd.DataFrame(ave,index=[r])
dummy = dummy.append(ave)

首先:我的总体目标是否合理?
第二:有没有更好的方法来实现这一点?转换为字典,然后是数据框,然后附加似乎很笨拙,但这是我拥有的最好的。

开始编辑unutbu 提出了一个很好的观点。如所写, rolling_mean() 将起作用。但是,我只对极少数数据行感兴趣,其他一切都被认为是垃圾。

# Now creating larger dataframe for illustration
df = pd.DataFrame(data=random.rand(10000,3),index=None,columns=list('ABC'))

# Now, most of the data are not averaged
for r in xrange(1,10000,50):
ave = df.ix[r-1:r+1].mean().to_dict()
ave = pd.DataFrame(ave,index=[r])

我的示例中存在的主要问题是显示平均计算的不规则性。平均是事件驱动的(即,如果某事发生在 2013-01-01 14:23,则对 2013-01-01 14:23 +/- 2.5 分钟左右的数据进行平均。

不幸的是,数据时间戳也是高度不规则的,这使得 rolling_mean() 在这种情况下无效。所以我有不规则的事件来决定什么时候我应该对我不规则记录的数据进行平均,这是一个很好的问题。

我可以实现我想要的,但只能通过将 ave 从系列转换为字典,然后再转换为数据框。或许在这种情况下,“足够好”应该被放在一边。

结束编辑 dummy = dummy.append(ave)

最佳答案

听起来你要找的是 pd.rolling_mean :

import pandas as pd
import numpy as np

np.random.seed(1)
# Build example dataframe
df = pd.DataFrame(data=np.random.rand(10,3), index=None, columns=list('ABC'))
print(df)
# A B C
# 0 0.417022 0.720324 0.000114
# 1 0.302333 0.146756 0.092339
# 2 0.186260 0.345561 0.396767
# 3 0.538817 0.419195 0.685220
# 4 0.204452 0.878117 0.027388
# 5 0.670468 0.417305 0.558690
# 6 0.140387 0.198101 0.800745
# 7 0.968262 0.313424 0.692323
# 8 0.876389 0.894607 0.085044
# 9 0.039055 0.169830 0.878143

dummy = pd.rolling_mean(df, window=3).dropna()
print(dummy)

产量

          A         B         C
2 0.301872 0.404214 0.163073
3 0.342470 0.303837 0.391442
4 0.309843 0.547624 0.369792
5 0.471245 0.571539 0.423766
6 0.338436 0.497841 0.462274
7 0.593039 0.309610 0.683919
8 0.661679 0.468711 0.526037
9 0.627902 0.459287 0.551836

关于python-2.7 - 从系列构建新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com