在新列Pandas中添加时间间隔值

时间:2018-04-06 09:19:15

标签: python pandas dataframe

我有一个大型的pandas数据帧(4000万行),格式如下:

ID                    DATETIME             TIMESTAMP
81215545953683710540  2017-01-01 17:39:57  1483243205
74994612102903447699  2017-01-01 19:14:12  1483243261
48126186377367976994  2017-01-01 17:19:29  1483243263
23522333658893375671  2017-01-01 12:50:46  1483243266
16194691060240380504  2017-01-01 15:59:23  1483243353

我正在尝试根据时间戳为每一行分配一个值,这样如果它们处于相同的时间间隔,我就会有一组具有相同值的行。

假设我t0 = 1483243205TIMESTAMP = t0+10时我想要一个不同的值。所以这里我的时间间隔是10。

我想要那样的东西:

ID                    DATETIME             TIMESTAMP  VALUE 
81215545953683710540  2017-01-01 17:39:57  1483243205 0
74994612102903447699  2017-01-01 19:14:12  1483243261 5
48126186377367976994  2017-01-01 17:19:29  1483243263 5
23522333658893375671  2017-01-01 12:50:46  1483243266 6
16194691060240380504  2017-01-01 15:59:23  1483243288 8

这是我的代码:

df['VALUE']=''
t=1483243205
j=0

for i in range(0,len(df['TIMESTAMP'])):
    while(df.iloc[i][2])<(t+10):
        df['VALUE'][i]=j
        i+=1  
    t+=10
    j+=1

执行代码时出现警告(SettingWithCopyWarning: 尝试在DataFrame的切片副本上设置一个值,我得到以下结果:

ID                    DATETIME             TIMESTAMP  VALUE 
81215545953683710540  2017-01-01 17:39:57  1483243205 0
74994612102903447699  2017-01-01 19:14:12  1483243261
48126186377367976994  2017-01-01 17:19:29  1483243263
23522333658893375671  2017-01-01 12:50:46  1483243266
16194691060240380504  2017-01-01 15:59:23  1483243288

这不是我第一次遇到警告而且我总是克服它,但我对第一行只得到一个值的事实感到困惑。

有谁知道我错过了什么?

由于

1 个答案:

答案 0 :(得分:1)

我建议使用熊猫&#39;切割方法来实现这一点,无需显式循环您的DataFrame。

tmin, tmax = df['TIMESTAMP'].min(), df['TIMESTAMP'].max()
bins = [i for i in range(tmin, tmax+10, 10)]
labels = [i for i in range(len(bins)-1)]

df['VALUE'] = pd.cut(df['TIMESTAMP'], bins=bins, labels=labels, include_lowest=True)

                      ID               DATETIME  TIMESTAMP  VALUE
0   81215545953683710540    2017-01-01 17:39:57 1483243205      0
1   74994612102903447699    2017-01-01 19:14:12 1483243261      5
2   48126186377367976994    2017-01-01 17:19:29 1483243263      5
3   23522333658893375671    2017-01-01 12:50:46 1483243266      6
4   16194691060240380504    2017-01-01 15:59:23 1483243288      8