You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何筛选Pandas DataFrame中时间参数特定分布区间的数据

实现方法

首先你需要先获取直方图的区间边界和对应频数,再定位到你要的红框对应的区间,最后按区间筛选数据即可,具体代码如下:

步骤1:绘制直方图同时获取区间参数

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 绘制直方图时开启return_bins参数,获取每个区间的频数n、区间边界bins、图形对象patches
n, bins, patches = df_input['time'].plot(kind='hist', figsize=(10,10), return_bins=True)
plt.grid()
plt.show()

说明:返回的bins是升序排列的区间边界数组,n是每个区间对应的频数,和bins一一对应,直方图默认使用左闭右开区间,最后一个区间为左闭右闭。

步骤2:定位目标区间

你可以按时间或者频数两种方式定位你要的红框区间:

方式A:按目标时间定位
target_time = 0.006  # 你要的目标时间值
# 查找目标时间所属的区间索引
bin_idx = np.digitize(target_time, bins) - 1
# 提取对应区间的左右边界
left_bound = bins[bin_idx]
right_bound = bins[bin_idx + 1]
print(f"目标区间:[{left_bound:.6f}, {right_bound:.6f}],对应频数:{n[bin_idx]:.1e}")
方式B:按目标频数定位
target_count = 7.5 * 10**5  # 你要的目标频数值
# 查找频数最接近目标值的区间索引
bin_idx = np.argmin(np.abs(n - target_count))
left_bound = bins[bin_idx]
right_bound = bins[bin_idx + 1]
print(f"目标区间:[{left_bound:.6f}, {right_bound:.6f}],对应频数:{n[bin_idx]:.1e}")

步骤3:提取对应区间的所有数据

# 筛选time字段落在目标区间内的所有行
df_target = df_input[(df_input['time'] >= left_bound) & (df_input['time'] < right_bound)]

# 如果需要去除重复行,可以加如下代码
# df_target = df_target.drop_duplicates()

筛选得到的df_target就是你需要的红框区间对应的所有数据。

内容的提问来源于stack exchange,提问作者MMM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:09:01