如何基于连续天数为DataFrame编制索引

马廷

我有一个日期时间索引不规则的熊猫数据框。现在,我想基于连续的连续观察为数据帧建立索引。换句话说,我只想保留存在x或多个连续观察值的值

请看以下示例:

idx = pd.DatetimeIndex(['2003-04-11', '2003-04-12', '2003-04-13','2003-04-17','2003-05-02', '2003-05-03', '2003-05-04','2003-07-23', '2003-07-24'])
df = pd.DataFrame(np.random.random((9,2)),index=idx)
df
              0        1
2003-04-11    0.954287 0.331016    
2003-04-12    0.553477 0.858590    
2003-04-13    0.179510 0.103970     
2003-04-17    0.608664 0.746860     
2003-05-02    0.691829 0.081192     
2003-05-03    0.790748 0.319989     
2003-05-04    0.955903 0.668918     
2003-07-23    0.630201 0.297902     
2003-07-24    0.692403 0.847222 

来自的3个连续观测值2003-04-11 ~ 13,然后是一个单独的观测值2003-04-17,比来自的3个连续观测值大,2003-05-02 ~ 04并且以的2个连续观测值结尾2003-07-23 ~ 24

如何索引连续3天或更长时间的这些观察?在此示例中,应保留以下观察结果:

              0        1
2003-04-11    0.954287 0.331016    
2003-04-12    0.553477 0.858590    
2003-04-13    0.179510 0.103970   
2003-05-02    0.691829 0.081192     
2003-05-03    0.790748 0.319989     
2003-05-04    0.955903 0.668918   
耶斯列尔

尽管答案被接受,但是您可以尝试其他方法:

df1 = df.loc[df.groupby((~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum() ).transform(len).iloc[:, 0] == 3]
print df1
                   0         1
2003-04-11  0.350339  0.904514
2003-04-12  0.903141  0.423335
2003-04-13  0.394534  0.803299
2003-05-02  0.158032  0.565684
2003-05-03  0.715311  0.772509
2003-05-04  0.136462  0.533705

一步步:

print ~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))
#2003-04-11     True
#2003-04-12    False
#2003-04-13    False
#2003-04-17     True
#2003-05-02     True
#2003-05-03    False
#2003-05-04    False
#2003-07-23     True
#2003-07-24    False
#dtype: bool

print (~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int)
#2003-04-11    1
#2003-04-12    0
#2003-04-13    0
#2003-04-17    1
#2003-05-02    1
#2003-05-03    0
#2003-05-04    0
#2003-07-23    1
#2003-07-24    0
#dtype: int32
print (~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum()
#2003-04-11    1
#2003-04-12    1
#2003-04-13    1
#2003-04-17    2
#2003-05-02    3
#2003-05-03    3
#2003-05-04    3
#2003-07-23    4
#2003-07-24    4
#dtype: int32
print df.groupby((~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum()).transform(len)
#            0  1
#2003-04-11  3  3
#2003-04-12  3  3
#2003-04-13  3  3
#2003-04-17  1  1
#2003-05-02  3  3
#2003-05-03  3  3
#2003-05-04  3  3
#2003-07-23  2  2
#2003-07-24  2  2
print df.groupby((~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum()).transform(len).iloc[:, 0]
#2003-04-11    3
#2003-04-12    3
#2003-04-13    3
#2003-04-17    1
#2003-05-02    3
#2003-05-03    3
#2003-05-04    3
#2003-07-23    2
#2003-07-24    2
#Name: 0, dtype: float64
print df.groupby((~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum()).transform(len).iloc[:, 0] == 3
#2003-04-11     True
#2003-04-12     True
#2003-04-13     True
#2003-04-17    False
#2003-05-02     True
#2003-05-03     True
#2003-05-04     True
#2003-07-23    False
#2003-07-24    False
#Name: 0, dtype: bool
print df.loc[df.groupby((~(df.index.to_series().diff() ==  pd.Timedelta(1, unit='d'))).astype(int).cumsum()).transform(len).iloc[:, 0] == 3]
#                   0         1
#2003-04-11  0.120301  0.635707
#2003-04-12  0.747283  0.681601
#2003-04-13  0.118192  0.777899
#2003-05-02  0.481396  0.294547
#2003-05-03  0.619790  0.058048
#2003-05-04  0.179386  0.348843

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于连续字段值的索引

来自分类Dev

如何基于连续属性对类的对象进行分组?

来自分类Dev

基于连续值的累积总和

来自分类Dev

基于连续值的累积总和

来自分类Dev

基于连续出现的填充日期

来自分类Dev

如何告诉Spotlight为我的.dSYM束编制索引?

来自分类Dev

如何在Haystack中为CommentsField编制索引?

来自分类Dev

如何使Google桌面为可搜索的pdf编制索引

来自分类Dev

Pandas 1.0.1-如何使用包含切片器的列表为具有MultiIndex的DataFrame编制索引

来自分类Dev

串联后如何为pandas DataFrame重新编制索引

来自分类Dev

使用列表为DataFrame编制索引,并为熊猫的越界索引返回NaN?

来自分类Dev

为日期分配连续的天数

来自分类Dev

如何找到连续的月份为6的索引?

来自分类Dev

SQL-sql中的累积总和,基于连续日期

来自分类Dev

基于连续匹配记录的SQL记录中的标签组

来自分类Dev

大熊猫基于连续相同的行进行聚合

来自分类Dev

SQL-sql中的累积总和,基于连续日期

来自分类Dev

Google App为游戏编制索引

来自分类Dev

Google App为游戏编制索引

来自分类Dev

强制突触为目录编制索引

来自分类Dev

如何在Simulink中的MATLAB函数中为数组值编制索引?

来自分类Dev

如何通过选择特定时间间隔中的时间为pandas DataFrames编制索引?

来自分类Dev

如何为pdf文档编制索引?

来自分类Dev

如何为pdf文档编制索引?

来自分类Dev

如何通过搜索引擎控制台在Google上为客户的网站(使用WordPress构建)编制索引?

来自分类Dev

基于网址查询的网页,Google会为它们编制索引吗?

来自分类Dev

不编制索引时如何获得“索引超出范围”

来自分类Dev

如何通过多索引加快熊猫的索引编制?

来自分类Dev

如何在不删除值的情况下按日期范围为熊猫数据框重新编制索引

Related 相关文章

  1. 1

    基于连续字段值的索引

  2. 2

    如何基于连续属性对类的对象进行分组?

  3. 3

    基于连续值的累积总和

  4. 4

    基于连续值的累积总和

  5. 5

    基于连续出现的填充日期

  6. 6

    如何告诉Spotlight为我的.dSYM束编制索引?

  7. 7

    如何在Haystack中为CommentsField编制索引?

  8. 8

    如何使Google桌面为可搜索的pdf编制索引

  9. 9

    Pandas 1.0.1-如何使用包含切片器的列表为具有MultiIndex的DataFrame编制索引

  10. 10

    串联后如何为pandas DataFrame重新编制索引

  11. 11

    使用列表为DataFrame编制索引,并为熊猫的越界索引返回NaN?

  12. 12

    为日期分配连续的天数

  13. 13

    如何找到连续的月份为6的索引?

  14. 14

    SQL-sql中的累积总和,基于连续日期

  15. 15

    基于连续匹配记录的SQL记录中的标签组

  16. 16

    大熊猫基于连续相同的行进行聚合

  17. 17

    SQL-sql中的累积总和,基于连续日期

  18. 18

    Google App为游戏编制索引

  19. 19

    Google App为游戏编制索引

  20. 20

    强制突触为目录编制索引

  21. 21

    如何在Simulink中的MATLAB函数中为数组值编制索引?

  22. 22

    如何通过选择特定时间间隔中的时间为pandas DataFrames编制索引?

  23. 23

    如何为pdf文档编制索引?

  24. 24

    如何为pdf文档编制索引?

  25. 25

    如何通过搜索引擎控制台在Google上为客户的网站(使用WordPress构建)编制索引?

  26. 26

    基于网址查询的网页,Google会为它们编制索引吗?

  27. 27

    不编制索引时如何获得“索引超出范围”

  28. 28

    如何通过多索引加快熊猫的索引编制?

  29. 29

    如何在不删除值的情况下按日期范围为熊猫数据框重新编制索引

热门标签

归档