python - 如何使用 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 中的值是连续整数,代表我的数据中不同长度的不同区域。熊猫如何做到这一点?
解决方案
该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
推荐阅读
- ruby - 将字符串数组分类为关闭正则表达式
- google-cloud-platform - 在 GCP 中加载 SQL 失败
- vb6 - 以编程方式将列注释添加到 Microsoft Access-97 数据库
- c# - 参考 Azure Functions 中的 Cosmos DB nuget 包
- c# - WPF 效果防止纹理重新加载
- javascript - 动态添加元素上的每个循环的单击事件 javascript / jquery
- android - 获取用户电子邮件 firebase 身份验证
- ssl - 内部代理是否需要 HTTPS?
- oracle-apex - 在 Oracle APEX 中插入静态数据以及数据加载向导实用程序
- jquery - jQuery插件无法识别的表达式:[object Object]