基于Python DataFrame的时序数据预处理:交替属性筛选及列表生成
时序DataFrame的属性分组极值提取
原始数据
| VAL1 | VAL2 | ATT1 | ATT2 |
|---|---|---|---|
| 1221 | 1221 | O | |
| 1121 | 1228 | O | |
| 1323 | 1425 | O | |
| 1522 | 1222 | X | |
| 1824 | 1128 | ||
| 1286 | 1221 | O | |
| 1829 | 1245 | ||
| 1111 | 1421 | X | |
| 1123 | 1622 | X | |
| 1276 | 1282 | O | |
| 1262 | 1542 | X | |
| 1423 | 1228 | O |
需求
- 生成属性交替、无连续重复的输出DataFrame
- 规则:连续ATT1(值为
O)组选取VAL1最大值;连续ATT2(值为X)组选取VAL2最小值 - 同时生成目标列表:
[1323, 1222, 1286, 1421, 1276, 1542, 1423]
解决方案
使用Pandas按以下步骤处理:
- 标记每行的有效属性类型(区分ATT1/O、ATT2/X和无属性)
- 对连续的有效属性行进行分组
- 针对不同属性组应用极值提取规则
- 整理结果并生成目标列表
代码实现
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
| VAL1 | VAL2 | ATT1 | ATT2 |
|---|---|---|---|
| 1323 | 1425 | O | |
| 1522 | 1222 | X | |
| 1286 | 1221 | O | |
| 1111 | 1421 | X | |
| 1276 | 1282 | O | |
| 1262 | 1542 | X | |
| 1423 | 1228 | O |
目标列表
[1323, 1222, 1286, 1421, 1276, 1542, 1423]
内容的提问来源于stack exchange,提问作者mshah
相关产品推荐
相关产品推荐

