我有这样的熊猫资料:
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,因为数据太大了。这是没有效率的。这不管用。
谢谢。
发布于 2018-11-04 03:46:58
使用groupby + diff(periods=-1)。乘以-1,得到差分约定,并用0填充and。
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发布于 2018-11-04 03:48:47
您可以在您的群中使用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发布于 2018-11-04 03:54:14
使用
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: float64https://stackoverflow.com/questions/53137563
复制相似问题