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

如何按DataFrame文件名从大型列表中按传感器分组提取子集?

按传感器编号分组DataFrame列表的解决方案

这个需求其实很好解决,核心思路就是从每个DataFrame的文件名里提取传感器编号(比如SE1、SE2),然后用字典把同一传感器的三个深度DataFrame归到一起。我给你两种常见场景的实现方法:

场景1:DataFrame存储在字典中(键为文件名)

如果你的450个DataFrame是存在一个字典里的——键是文件名,值是对应的DataFrame,那可以这么做:

# 假设你的DataFrames字典是这样的(示例)
dfs_dict = {
    'ALL_SM51_SE1_hourly': df_se1_5cm,
    'ALL_SM201_SE1_hourly': df_se1_20cm,
    'ALL_SM501_SE1_hourly': df_se1_50cm,
    # ... 剩下的447个DataFrame
}

# 初始化空字典用于存分组结果
sensor_groups = {}

# 遍历所有DataFrame
for file_name, df in dfs_dict.items():
    # 从文件名里提取传感器编号:拆分字符串后取第3段(索引2)
    sensor_id = file_name.split('_')[2]
    # 如果这个传感器还没在分组字典里,先创建空列表
    if sensor_id not in sensor_groups:
        sensor_groups[sensor_id] = []
    # 把当前DataFrame加入对应传感器的列表
    sensor_groups[sensor_id].append(df)

运行后,sensor_groups['SE1']就是包含SE1三个深度DataFrame的列表,sensor_groups['SE2']对应SE2的,以此类推。

场景2:DataFrame存储在列表中(带name属性)

如果你的DataFrame是存在一个列表里,且每个DataFrame都有name属性对应它的文件名,那代码可以调整成这样:

# 假设你的DataFrame列表是这样的(示例)
df_list = [df_se1_5cm, df_se1_20cm, df_se1_50cm, ...]
# 每个df的name属性比如是 'ALL_SM51_SE1_hourly'

sensor_groups = {}

for df in df_list:
    # 从df的name属性里提取传感器编号
    sensor_id = df.name.split('_')[2]
    if sensor_id not in sensor_groups:
        sensor_groups[sensor_id] = []
    sensor_groups[sensor_id].append(df)

优化写法:用defaultdict简化代码

如果你不想每次都判断传感器是否存在,可以用collections.defaultdict来简化:

from collections import defaultdict

sensor_groups = defaultdict(list)

# 不管是字典还是列表场景,遍历逻辑类似,以字典为例:
for file_name, df in dfs_dict.items():
    sensor_id = file_name.split('_')[2]
    sensor_groups[sensor_id].append(df)

按顺序提取子列表(SE1到SE150)

如果需要得到一个按SE1到SE150顺序排列的子列表集合,可以这样生成:

sorted_sensor_lists = [sensor_groups[f'SE{i}'] for i in range(1, 151)]

现在sorted_sensor_lists[0]就是SE1的三个DataFrame,sorted_sensor_lists[1]是SE2的,直到第149个元素对应SE150的DataFrame列表。

注意事项

如果你的DataFrame列表里没有存储文件名,那建议在创建列表的时候把文件名和DataFrame存成元组,比如:

df_list = [('ALL_SM51_SE1_hourly', df_se1_5cm), ('ALL_SM201_SE1_hourly', df_se1_20cm), ...]

然后遍历的时候取元组的第一个元素作为文件名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 08:17:37