如何通过market_state列匹配,替换DataFrame中单行为预存多行数据?
问题描述
原始Pandas DataFrame:
time market_state 5:00:00 open 6:00:00 continuous 7:30:00 continuous 9:12:00 unscheduled 10:02:02 intraday 10:05:03 intraday 11:00:33 closed
已完成操作:
- 移除连续相同
market_state的行,得到处理后DataFrame:
time market_state 5:00:00 open 7:30:00 continuous 9:12:00 unscheduled 10:02:02 intraday 11:00:33 closed
- 提前存储了所有
market_state为intraday的原始行:
store_intraday_market_state = df.loc[df['market_state'] == 'intraday']
存储结果:
time market_state 10:02:02 intraday 10:05:03 intraday
需求:通过market_state列匹配,将处理后DataFrame中的单条intraday行替换为预存的两行数据。
解决方案
可以通过拆分拼接的方式实现,具体代码如下:
方法一:定位索引后拆分拼接
import pandas as pd # 假设处理后的DataFrame名为processed_df # 找到处理后DataFrame中intraday行的索引 intraday_index = processed_df[processed_df['market_state'] == 'intraday'].index[0] # 拆分原DataFrame并拼接预存数据 final_df = pd.concat([ processed_df.loc[:intraday_index - 1], # 取intraday行之前的所有数据 store_intraday_market_state, # 插入预存的两行intraday数据 processed_df.loc[intraday_index + 1:] # 取intraday行之后的所有数据 ]).reset_index(drop=True)
方法二:先删除再插入
# 先移除处理后DataFrame中的intraday行 temp_df = processed_df[processed_df['market_state'] != 'intraday'] # 获取原intraday行的位置 insert_position = processed_df[processed_df['market_state'] == 'intraday'].index[0] # 拼接得到最终结果 final_df = pd.concat([ temp_df.iloc[:insert_position], store_intraday_market_state, temp_df.iloc[insert_position:] ]).reset_index(drop=True)
最终结果
执行后final_df的内容为:
time market_state 5:00:00 open 7:30:00 continuous 9:12:00 unscheduled 10:02:02 intraday 10:05:03 intraday 11:00:33 closed
内容的提问来源于stack exchange,提问作者user19667022
相关产品推荐
相关产品推荐

