如何用Pandas从嵌套DataFrame提取柴油价格生成字典新列?
解决方案
先说说你原来代码的问题:最后一行用dfnew.apply(...)的时候,lambda里的x是dfnew的单行数据,不是整个子DataFrame,遍历x会拿到每个列的具体值(比如CashPrice是整数),自然会报“int不可迭代”的错。而且用iterrows循环赋值效率低,还容易出索引警告,换用apply直接处理整个列更靠谱。
直接用下面的代码替换你的循环:
import pandas as pd def extract_diesel_changes(sub_df): # 把单元格里的内容转成DataFrame df = pd.DataFrame(sub_df) # 筛选柴油行,然后转成{时间:价格}的字典 diesel_rows = df[df['ProductName'] == 'DIESEL'] return diesel_rows.set_index('LastPriceChangeDateTime')['CashPrice'].to_dict() # 生成新列 df['diesel_price_change'] = df['FuelPrices'].apply(extract_diesel_changes)
代码说明:
extract_diesel_changes函数专门处理每个FuelPrices单元格的子DataFrame:- 先把输入的子数据转成标准DataFrame;
- 筛选出
ProductName为DIESEL的行; - 用
set_index把时间列设为索引,再通过to_dict()直接生成{时间:现金价格}的字典。
- 最后用
df['FuelPrices'].apply(...)批量处理所有行,直接生成新列,比循环高效得多,也不会有索引问题。
内容的提问来源于stack exchange,提问作者oToMaTiX
相关产品推荐
相关产品推荐

