我对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万。
提前致谢。
答案 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