python - 使用唯一时间戳的子集 df - pandas
问题描述
我的目标是仅在 df 中返回与前两个唯一时间戳关联的行。但是,在下面,我将返回每个时间戳的前两个。
df1 = pd.DataFrame({
'Time' : ['2019-08-02 09:50:10.100','2019-08-02 09:50:10.100','2019-08-02 09:50:10.100','2019-08-02 09:50:10.200','2019-08-02 09:50:10.200','2019-08-02 09:50:10.200','2019-08-02 09:50:10.300','2019-08-02 09:50:10.300','2019-08-02 09:50:10.300'],
})
df1['Time'] = pd.to_datetime(df1['Time'])
df1 = df1.groupby(['Time']).head(2)
故意的:
Time
0 2019-08-02 09:50:10.100
1 2019-08-02 09:50:10.100
2 2019-08-02 09:50:10.200
3 2019-08-02 09:50:10.200
解决方案
尝试过滤groupby ngroup
小于 2:
new_df = df1[df1.groupby('Time').ngroup().lt(2)]
new_df
:
Time
0 2019-08-02 09:50:10.100
1 2019-08-02 09:50:10.100
2 2019-08-02 09:50:10.100
3 2019-08-02 09:50:10.200
4 2019-08-02 09:50:10.200
5 2019-08-02 09:50:10.200
groupby ngroup
为每个时间创建组号:
0 0
1 0
2 0
3 1
4 1
5 1
6 2
7 2
8 2
dtype: int64
然后仅选择与第 0 次和第 1 次关联的行。( lt 2
) 或 ( le 1
)
或使用unique
前 2 个切片获取唯一时间值,然后用于isin
测试时间值:
new_df = df1[df1['Time'].isin(df1['Time'].unique()[:2])]
new_df
:
Time
0 2019-08-02 09:50:10.100
1 2019-08-02 09:50:10.100
2 2019-08-02 09:50:10.100
3 2019-08-02 09:50:10.200
4 2019-08-02 09:50:10.200
5 2019-08-02 09:50:10.200
推荐阅读
- python - 如何减少嵌套的字典?
- flutter - Flutter - 如何刷新来自另一个类的数据的 ListView
- android - React Native - 前台服务中没有超时的地理位置
- css - CSS背景动画:不断地从上到下移动图像
- python - 如何在python中发送帖子请求
- c# - 将人们在 C# 中的 DataTable 中输入的值发送到微控制器
- asp.net - Serilog 未将日志插入数据库表
- linux - AWS-Linux-Docker-Selenium 网格无法启动服务 chrome:端口已分配错误
- flutter - 如何在颤动中实现超时按钮
- domain-driven-design - 处理需要生成多个命令的单个请求的 CQRS 和事件溯源方式