连续对某行进行熊猫列操作

时间:2018-11-04 03:40:21

标签: sql python-3.x pandas

我有一个这样的熊猫数据框:

    second          block
0   1               a
1   2               b
2   3               c
3   4               a
4   5               c

这是一个顺序数据,我想获得一个新列,该列是当前块与下一次重复之间的时间差。

    second          block     freq
0   1               a         3 //(4-1)
1   2               b         0 //(not repeating)
2   3               c         2 //(5-3)
3   4               a         0 //(not repeating)
4   5               c         0 //(not repeating)

我试图获取唯一的块列表。然后执行如下的for循环。

for i in unique_block:
    df['freq'] = df['timestamp'].shift(-1) - df['timestamp']

由于数据帧太大,我不知道如何为行索引1,3,4获取0。这不是有效的。这不起作用。

谢谢。

3 个答案:

答案 0 :(得分:2)

使用groupby + diff(periods=-1)。乘以-1即可得出差异约定和fillna为0。

df['freq'] = (df.groupby('block').diff(-1)*-1).fillna(0)

   second block  freq
0       1     a   3.0
1       2     b   0.0
2       3     c   2.0
3       4     a   0.0
4       5     c   0.0

答案 1 :(得分:2)

您可以在分组依据中使用shifttransform

df['freq'] = df.groupby('block').second.transform(lambda x: x.shift(-1) - x).fillna(0)
>>> df
   second block  freq
0       1     a   3.0
1       2     b   0.0
2       3     c   2.0
3       4     a   0.0
4       5     c   0.0

答案 2 :(得分:2)

使用

df.groupby('block').second.apply(lambda x : x.diff().shift(-1)).fillna(0)
Out[242]: 
0    3.0
1    0
2    2.0
3    0
4    0
Name: second, dtype: float64