我有一个python程序需要很长时间才能运行,很可能是因为我使用的是循环,我希望我可以得到一些帮助,在一个部分中使用Pandas或Numpy来加速它。似乎第一个FOR循环可以用熊猫或者纽比来优化。也就是说,我不太熟悉熊猫和纽普瑞的复杂结构来实现这个循环。如有任何帮助,请告诉我,如果有任何问题,谢谢!在
df = data below
df2 = pandas.DataFrame()
for i in df.index:
if df.V[i]>1:
for f in range(0,df.V[i]):
df2 = df2.append(df.loc[i],ignore_index=True)
elif df.V[i]==1:
df2 = df2.append(df.loc[i],ignore_index=True)
df2.V = 1
df2['Grouper']=""
bv=10
y=bv
x=len(df2)
for d in range(0,x,y):
z = d+y
df2['Grouper'][d:z]=d
df3 = df2.groupby('Grouper').agg({'Date_Time':'first','L1':'last','H':'max','L2':'min','O':'first'})
df3 = df3.reset_index(drop=True)
df3 = df3[['Date_Time','O','H','L1','L2']]
这是我在这个程序(df)中使用的数据示例:
^{pr2}$
for
循环当然非常慢:首先,索引到数据帧中在计算时间上相当昂贵。另外,df.V[i]
中的链式索引还有一个小的性能损失;如果改为df.loc[i,'V']
,则速度会稍快一些。尽管如此,按索引遍历一个数据帧是非常缓慢的,并且通常可以避免大多数问题(如果您绝对必须这样做,df.iterrows()
会给您一个稍微快一点的迭代器)。代码慢的另一个原因是每次调用.append()
方法时都会创建一个数据帧的副本,这对于大数据集来说很难处理。对于这个例子,我们可以避免做几乎所有这些。在{6}我们可以用时间序列的方法来处理时间序列的数据。在
一些评论:
method='zero'
告诉 熊猫只是在它前面一排。但是,它不起作用 对于字符串,因此需要手动替换它们;最好的I 可以想到的是一个for
循环,希望不会重复太多次。在inplace = True
参数表示直接修改数据,而不是创建数据帧的修改副本并用它替换旧的副本.agg()
方法允许您在要聚合的对象上使用多个函数,因此如果您想要'min'
和{{'L':['min','last']}
或{{'L':['min','last']}
或{.columns
属性(但是要注意名称的顺序,因为传递到.agg()
方法的字典没有顺序!在相关问题 更多 >
编程相关推荐