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

Python 在数据帧上循环期间执行时间很长,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我对Python和Pandas有点陌生,我正在尝试做一件非常简单的事情,那就是在Pandas数据帧的一列(称为df)上循环并修改一个值,如下面的代码片段所示 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 问

我对Python和Pandas有点陌生,我正在尝试做一件非常简单的事情,那就是在Pandas数据帧的一列(称为df)上循环并修改一个值,如下面的代码片段所示

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万

提前谢谢。

这就是你想要的吗

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

一些示例输入/输出会很好。。。
[1,2,2,3,2,3,3,3,4,4,1,2,3]
应该生成什么作为输出?您可以显示示例数据吗?例如[1,2,4,4,5,7,7,8]应该产生[1,2,3,4,5,6,7,8]。实际上是这样的,问题是这个循环在900万长的数据帧上花费了太多的时间(我不知道有多少)。@Gianmaromusso那么
[4,4,4,4,5,5,5]
会是什么呢?试着找出它应该是1,2,3,4还是3,4,3,4。。。或者其他一些…当使用pandas时-你根本不应该编写Python循环-你应该看看内置的numpy/pandas等等。。。函数,所以它们是矢量化的操作。。。