首页 > 解决方案 > pandas 数据块索引

问题描述

我想找到数据集中每个数据块的起始索引和结束索引。数据是这样的:

index     A  wanted_column1 wanted_column2
2000/1/1  0                    0
2000/1/2  1   2000/1/2         1
2000/1/3  1                    1
2000/1/4  1                    1
2000/1/5  0                    0
2000/1/6  1   2000/1/6         2
2000/1/7  1                    2
2000/1/8  1                    2
2000/1/9  0                    0

如数据所示,indexandA是给定的列,wanted_column1andwanted_column2是我想要得到的。这个想法是有不同的连续数据块。我想检索每个数据块的起始索引,并且我想增加数据中有多少块的计数。

我尝试使用shift(-1),但无法区分起始索引和结束索引之间的差异。

标签: pythonpandasdataframeindexing

解决方案


那是你需要的吗?

df['change'] = df['A'].diff().eq(1)
df['wanted_column1'] = df[['index','change']].apply(lambda x: x[0] if x[1] else None, axis=1)
df['wanted_column2'] = df['change'].cumsum()
df['wanted_column2'] = df[['wanted_column2','A']].apply(lambda x: 0 if x[1]==0 else x[0], axis=1)
df.drop('change', axis=1, inplace=True)

这产生:

    index       A   wanted_column1  wanted_column2
0   2000/1/1    0   None            0
1   2000/1/2    1   2000/1/2        1
2   2000/1/3    1   None            1
3   2000/1/4    1   None            1
4   2000/1/5    0   None            0
5   2000/1/6    1   2000/1/6        2
6   2000/1/7    1   None            2
7   2000/1/8    1   None            2
8   2000/1/9    0   None            2

编辑:性能比较

  • gehbiszumeis的解决方案:19.9 ms
  • my解决方案 :4.07 ms

推荐阅读