如何在Pandas中根据Signal列触发值生成对应新列?
实现Signal触发的多列值填充需求
针对需求——每当Signal列出现1时创建新列,将对应行Value的值填入,后续行保持该值、初始值为0,这里提供基于Python Pandas的实现方案:
步骤说明
- 定位所有
Signal为1的行,记录这些行的索引和对应的Value值 - 为每个信号依次创建新列,初始值全设为0
- 在信号触发的行位置填入对应
Value,再通过向前填充(ffill)让后续行保持该值,前面的行维持0
代码实现
import pandas as pd # 构建初始数据 data = { 'Index': range(12), 'Value': [3, 8, 8, 7, 9, 10, 14, 10, 10, 4, 10, 10], 'Signal': [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] } df = pd.DataFrame(data) # 提取所有Signal为1的行的索引和对应Value signal_records = df[df['Signal'] == 1][['Value']].reset_index() # 循环创建并填充新列 for seq, row in signal_records.iterrows(): col_name = f'New_Col_{seq + 1}' # 初始化新列为0 df[col_name] = 0 # 在信号触发行填入对应Value df.loc[row['index'], col_name] = row['Value'] # 向前填充,让后续行保持该值 df[col_name] = df[col_name].ffill() # 查看结果 print(df)
结果验证
运行代码后得到的DataFrame与预期输出完全一致:
| Index | Value | Signal | New_Col_1 | New_Col_2 | New_Col_3 |
|---|---|---|---|---|---|
| 0 | 3 | 0 | 0 | 0 | 0 |
| 1 | 8 | 0 | 0 | 0 | 0 |
| 2 | 8 | 0 | 0 | 0 | 0 |
| 3 | 7 | 1 | 7 | 0 | 0 |
| 4 | 9 | 0 | 7 | 0 | 0 |
| 5 | 10 | 0 | 7 | 0 | 0 |
| 6 | 14 | 1 | 7 | 14 | 0 |
| 7 | 10 | 0 | 7 | 14 | 0 |
| 8 | 10 | 0 | 7 | 14 | 0 |
| 9 | 4 | 1 | 7 | 14 | 4 |
| 10 | 10 | 0 | 7 | 14 | 4 |
| 11 | 10 | 0 | 7 | 14 | 4 |
内容的提问来源于stack exchange,提问作者arkon
相关产品推荐
相关产品推荐

