我有一个这样的熊猫数据框:
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。这不是有效的。这不起作用。
谢谢。
答案 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)
您可以在分组依据中使用shift
和transform
:
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