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

基于Python DataFrame的时序数据预处理:交替属性筛选及列表生成

时序DataFrame的属性分组极值提取

原始数据

VAL1VAL2ATT1ATT2
12211221O
11211228O
13231425O
15221222X
18241128
12861221O
18291245
11111421X
11231622X
12761282O
12621542X
14231228O

需求

  • 生成属性交替、无连续重复的输出DataFrame
  • 规则:连续ATT1(值为O)组选取VAL1最大值;连续ATT2(值为X)组选取VAL2最小值
  • 同时生成目标列表:[1323, 1222, 1286, 1421, 1276, 1542, 1423]

解决方案

使用Pandas按以下步骤处理:

  1. 标记每行的有效属性类型(区分ATT1/O、ATT2/X和无属性)
  2. 对连续的有效属性行进行分组
  3. 针对不同属性组应用极值提取规则
  4. 整理结果并生成目标列表

代码实现

import pandas as pd

# 构造原始DataFrame
data = {
    'VAL1': [1221, 1121, 1323, 1522, 1824, 1286, 1829, 1111, 1123, 1276, 1262, 1423],
    'VAL2': [1221, 1228, 1425, 1222, 1128, 1221, 1245, 1421, 1622, 1282, 1542, 1228],
    'ATT1': ['O', 'O', 'O', '', '', 'O', '', '', '', 'O', '', 'O'],
    'ATT2': ['', '', '', 'X', '', '', '', 'X', 'X', '', 'X', '']
}
df = pd.DataFrame(data)

# 标记每行的有效属性类型
df['attr'] = df.apply(lambda row: 'ATT1' if row['ATT1'] == 'O' else ('ATT2' if row['ATT2'] == 'X' else None), axis=1)

# 生成连续有效属性的分组键
valid_df = df.dropna(subset=['attr'])
valid_df['group'] = (valid_df['attr'] != valid_df['attr'].shift()).cumsum()

# 按组提取极值行
def get_extreme_row(group):
    if group['attr'].iloc[0] == 'ATT1':
        return group[group['VAL1'] == group['VAL1'].max()]
    else:
        return group[group['VAL2'] == group['VAL2'].min()]

result_df = valid_df.groupby('group').apply(get_extreme_row).reset_index(drop=True)
result_df = result_df.drop(columns=['attr', 'group'])

# 生成目标列表
target_list = []
for _, row in result_df.iterrows():
    target_list.append(row['VAL1'] if row['ATT1'] == 'O' else row['VAL2'])

# 输出结果
print("输出DataFrame:")
print(result_df)
print("\n目标列表:")
print(target_list)

输出结果

输出DataFrame

VAL1VAL2ATT1ATT2
13231425O
15221222X
12861221O
11111421X
12761282O
12621542X
14231228O

目标列表

[1323, 1222, 1286, 1421, 1276, 1542, 1423]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06