首页 > 解决方案 > 如何使用 pandas 从数据框中构建开始/停止段列表?

问题描述

我有一个包含如下数据的数据框:

datetime    my_value
2020-01-01   0
2020-01-02   0
2020-01-03   0
2020-01-04   1
2020-01-05   1
2020-01-06   2
2020-01-07   2
2020-01-08   2
2020-01-09   2
2020-01-10   3
2020-01-11   3

我想找到每个my_value组开始和停止的时间

例如,“0”块从索引 0 开始并在索引 2 处结束,“1”块从 3 开始并在索引 4 处结束(但我需要日期时间数据)。

datetime 列是一个索引,每一行都是唯一的。my_value 中的值是连续整数,代表我的数据中不同长度的不同区域。熊猫如何做到这一点?

标签: pythonpandas

解决方案


groupby()函数将执行此操作。首先,创建一个数据框:

import pandas as pd
data = [0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3]
df = pd.DataFrame(
    {'datetime': pd.date_range(start='2020-01-01', periods=len(data), freq='D'),
     'my_value': data,})

print(df.head())
    datetime  my_value
0 2020-01-01         0
1 2020-01-02         0
2 2020-01-03         0
3 2020-01-04         1
4 2020-01-05         1

然后,reset_index 和 groupby:

t = df.reset_index().groupby('my_value')['index'].agg(['min', 'max'])
print(t)

          min  max
my_value          
0           0    2
1           3    4
2           5    8
3           9   10

推荐阅读