首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连续对某一行进行熊猫栏操作

连续对某一行进行熊猫栏操作
EN

Stack Overflow用户
提问于 2018-11-04 03:40:21
回答 3查看 87关注 0票数 4

我有这样的熊猫资料:

代码语言:javascript
复制
    second          block
0   1               a
1   2               b
2   3               c
3   4               a
4   5               c

这是一个连续的数据,我想得到一个新的列,它是当前块和下一次重复之间的时间差。

代码语言:javascript
复制
    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循环。

代码语言:javascript
复制
for i in unique_block:
    df['freq'] = df['timestamp'].shift(-1) - df['timestamp']

我不知道如何为行索引1,3,4获得0,因为数据太大了。这是没有效率的。这不管用。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-04 03:46:58

使用groupby + diff(periods=-1)。乘以-1,得到差分约定,并用0填充and。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-11-04 03:48:47

您可以在您的群中使用shifttransform

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-11-04 03:54:14

使用

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53137563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档