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
相关产品推荐
相关产品推荐

