在pandas数据帧循环期间执行很长时间

时间:2018-03-10 14:20:42

标签: python pandas loops dataframe

我对Python和Pandas并不熟悉,我试图做一个非常简单的事情,即在一个名为df的pandas数据帧的列上循环并修改一个值,如下面的代码片段所示

for i in range(0,len(df.time) - 1):
    if df.time[i] == df.time[i+1]:
       df.at[i,'time'] = df.time[i] - 1

df是数据框,其列为" time"。我正在按时查找重复的刻度,如果两个后续的时间步长具有相同的值,我将第一个减1。

问题是需要花费太多时间!我跑了20多分钟,它没有结束!在Matlab上,同样的事情在几秒钟内完成。为什么这样,我该如何解决?我还应该说这个数据帧的大小超过900万。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这就是你想要的吗?

In [83]: df['new'] = df['time']

In [84]: df.loc[df.time.diff(-1).eq(0), 'new'] = df.loc[df.time.diff(-1).eq(0), 'time'] - 1

In [85]: df
Out[85]:
   time  new
0     1    1
1     2    2
2     4    3
3     4    4
4     5    5
5     7    6
6     7    7
7     8    8