【问题标题】:pandas column operation on certain row in succession连续对某行进行pandas列操作
【发布时间】:2019-04-07 19:39:39
【问题描述】:

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

    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,因为数据框太大。这效率不高。这不起作用。

谢谢。

【问题讨论】:

    标签: sql python-3.x pandas


    【解决方案1】:

    使用groupby + diff(periods=-1)。乘以-1 得到你的差异约定并用 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
    

    【讨论】:

      【解决方案2】:

      您可以在 groupby 中使用 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
      

      【讨论】:

        【解决方案3】:

        使用

        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
        

        【讨论】:

          猜你喜欢
          • 2022-01-07
          • 1970-01-01
          • 2018-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-28
          • 2019-06-23
          • 1970-01-01
          相关资源
          最近更新 更多