如何从索引列表中找到对应电压最值的索引值?
问题描述
我有如下形式的列表:
results = [[71, 84, 97, 106, 154, 183, 251, 283, 320], [354, 368, 381, 395, 435, 466, 511, 565, 602], [636, 650, 661, 671, 712, 741, 789, 850, 887], [921, 935, 947, 956, 1000, 1032, 1084, 1111, 1117, 1146, 1167, 1171, 1186], [1220, 1233, 1246, 1256, 1298, 1330, 1395, 1401, 1413, 1440, 1482]]
这些值是名为volt的DataFrame的索引,该DataFrame存储着电压读数,片段如下:
| T | voltage |
|---|---|
| 0 | -0.450 |
| 1 | -0.460 |
| 2 | -0.475 |
| 3 | -0.480 |
| 4 | -0.410 |
| 5 | -0.312 |
| 6 | -0.124 |
| 7 | -0.324 |
| 8 | -0.634 |
| 9 | -0.673 |
| 10 | -0.918 |
例如,运行以下代码:
print(volt[results[0][0]])
会输出:
-0.69
我需要找到results列表中每个子列表里,对应电压最大值和最小值的索引值。比如第一个子列表[71, 84, 97, 106, 154, 183, 251, 283, 320]中,volt[106]是最大值,volt[320]是最小值,我要获取这些索引。
我当前的代码如下:
max_vals = [] min_vals = [] for i in results: max_vals.append(max(volt[i])) min_vals.append(min(volt[i]))
运行后得到的是最值电压值,但我需要的是对应的索引值,请问该如何修改代码?
解决方案
可以利用Pandas的idxmax()和idxmin()方法,这两个方法会直接返回对应最值的索引值,修改后的代码如下:
max_indices = [] min_indices = [] for sublist in results: # 筛选当前子列表对应的DataFrame片段 subset = volt.loc[sublist] # 获取最大值对应的索引 max_indices.append(subset['voltage'].idxmax()) # 获取最小值对应的索引 min_indices.append(subset['voltage'].idxmin())
代码说明
volt.loc[sublist]:通过索引列表筛选出对应的DataFrame子集,确保只在当前子列表的索引范围内查找最值。idxmax():返回指定列(这里是voltage)最大值对应的索引。idxmin():返回指定列最小值对应的索引。
如果你的volt是Series而非DataFrame(直接以索引取值返回电压值),可以简化成:
max_indices = [] min_indices = [] for sublist in results: subset = volt[sublist] max_indices.append(subset.idxmax()) min_indices.append(subset.idxmin())
内容的提问来源于stack exchange,提问作者InterestingPenguin80
相关产品推荐
相关产品推荐

