【问题标题】:How to identify subsets with continuous index within dataframe如何在数据框中识别具有连续索引的子集
【发布时间】:2018-06-06 14:37:37
【问题描述】:

我有一个这样定义的数据框:

df = pd.DataFrame({'A':[5,8,96,3,5,41,2,45,7,8], 'B':[1,2,3,5,6,10,11,12,13,18]})
df = df.set_index('B')
df.index.name = None

我的目标是为具有连续索引的数据帧子集分配如下值:

算法:从图片中可以看出,前 3 行的索引为 1、2、3,它们增加了 1(因此是连续的)。因此,我将 C 列中的值 0 分配给该子集。 第二个子集由具有连续索引 5 和 6 的行组成(注意没有索引 4!)。因此,我将 C 列中的值 1 分配给他们。

问题:您知道实现这种结果的有效且聪明的方法吗?我能够通过使用大量的 for 循环和 if 来实现这样的结果,但它非常讨厌。

【问题讨论】:

    标签: python pandas dataframe indexing


    【解决方案1】:

    您可以将diff 与cumsum 一起使用;计算diff,检查是否等于1(连续条件),然后cumsum(计数)非连续跳转:

    df['C'] = df.index.to_series().diff().ne(1).cumsum().sub(1) 
    
    df
    #     A  C
    #1    5  0
    #2    8  0
    #3   96  0
    #5    3  1
    #6    5  1
    #10  41  2
    #11   2  2
    #12  45  2
    #13   7  2
    #18   8  3
    

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 2016-03-19
      • 2021-12-16
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多