【发布时间】:2023-04-04 16:40:02
【问题描述】:
我的数据组织在多索引数据框中。我正在尝试按“扫描”索引进行分组,并返回特定时间范围内的最小值(或最大值)以及该时间发生的时间。
数据如下:
Time Primary Secondary BL LED
Sweep
Sweep1 0 0.00000 -28173.828125 -0.416565 -0.000305
1 0.00005 -27050.781250 -0.416260 0.000305
2 0.00010 -27490.234375 -0.415955 -0.002441
3 0.00015 -28222.656250 -0.416260 0.000305
4 0.00020 -28759.765625 -0.414429 -0.002136
获取最小值或最大值非常简单。
def find_groupby_peak(voltage_df, start_time, end_time, peak="min"):
boolean_vr = (voltage_df.Time >= start_time) & (voltage_df.Time <=end_time)
df_subset = voltage_df[boolean_vr]
grouped = df_subset.groupby(level="Sweep")
if peak == "min":
peak = grouped.Primary.min()
elif peak == "max":
peak = grouped.max()
return peak
给出(部分输出):
Sweep
Sweep1 -92333.984375
Sweep10 -86523.437500
Sweep11 -85205.078125
Sweep12 -87109.375000
Sweep13 -77929.687500
但我也需要确定这些峰值出现的时间。我知道我可以遍历输出并找到这些值在原始数据集中出现的位置,但这似乎是一种相当蛮力的方法。我还可以编写一个不同的函数来应用于返回最大值和出现最大值的时间的分组对象(至少在理论上 - 没有尝试过这样做,但我认为这很简单)。
除了这两个选项之外,是否有更简单的方法来传递来自 grouped.Primary.min() 的输出(即峰值)以返回这些值出现的时间?
【问题讨论】:
标签: python pandas group-by min