如何使用 pandas 执行以下任务,速度更快且不发出警告 'SettingWithCopyWarning'

How to perform below task using pandas which is faster and does not give warning 'SettingWithCopyWarning'

我正在访问数据中的时间戳。如果多个时间戳具有相同的值,则更改它们。在这种情况下,如果两个相同,则将 2 添加到第二个时间戳。如果三个相同,则第二个加 2,第三个加 4,依此类推。 我收到警告 /anaconda/lib/python3.6/site-packages/ipykernel/main.py:8: SettingWithCopyWarning: 试图在 DataFrame

的切片副本上设置一个值

查看文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

我的问题是:执行任务的时间太长了。我想知道 pandas 中是否有一些特定的方法可以更精确地执行任务。请考虑我是熊猫新手。

dftime =df.time 
for i in range (len(dftime)):
    if i!=0:
        if dftime[i]==dftime[i-1]:
            dftime[i]=dftime[i]+2
        if dftime[i]<dftime[i-1]:
            dftime[i]=dftime[i-1]+2

通常,您不应该使用 for i in range(len(collection)) 构造来迭代 Python 中的集合,因为您可以简单地使用 for item in collection.

特别是在 pandas 中,您很少需要迭代系列,如果您这样做,则永远不要修改正在迭代的内容。根据数据类型,迭代器可能 return 一个副本并写入它不会有任何效果。相反,您应该选择对整个数组进行操作。

pandas 重写代码的方法是

dftime = df.time
dftime[dftime == dftime.shift()] += 2
dftime[dftime < dftime.shift()] += 2