如何基于日期与Dump Number在Pandas DataFrame指定位置插入数据?
问题解答
背景
你拥有两个Pandas DataFrame:
set1:包含Date(格式为yyyy.doy)、Dump Number、VC5 Start字段,且预留了VC2 Start列set2:包含Date、Dump Number和VC2 Start字段
需要将set2中的VC2 Start数据,依据Date和Dump Number匹配插入到set1对应行的VC2 Start列,此前尝试索引定位的代码失败,有两个疑问:
A. 如何根据set2的日期和Dump Number找到目标DataFrame的对应行?
可以用布尔索引精准定位匹配行,比如针对set2中的单一行,构造set1中双字段匹配的条件:
# 以set2的第i行为例 matched_rows = set1[(set1['Date'] == set2.loc[i, 'Date']) & (set1['Dump Number'] == set2.loc[i, 'Dump Number'])]
如果要批量处理所有行,更高效的方式是直接用pd.merge做关联——也就是你后来采用的方法,merge会自动根据指定的键匹配对应行。
B. 如何将VC2 Start数据插入该行对应列?
如果用布尔索引定位到目标行后,可通过.loc直接赋值:
# 将set2第i行的VC2 Start写入set1的对应行 set1.loc[(set1['Date'] == set2.loc[i, 'Date']) & (set1['Dump Number'] == set2.loc[i, 'Dump Number']), 'VC2 Start'] = set2.loc[i, 'VC2 Start']
但逐行处理效率偏低,更推荐你发现的pd.merge批量处理方案,一次性完成匹配与数据插入:
# 按Date和Dump Number合并,保留set1的所有行 merged_df = pd.merge(set1, set2, on=['Date', 'Dump Number'], how='left') # 若merge后列名重复(如VC2 Start会生成VC2 Start_x、VC2 Start_y),可调整列名 merged_df['VC2 Start'] = merged_df.pop('VC2 Start_y')
内容的提问来源于stack exchange,提问作者mperrotta913
相关产品推荐
相关产品推荐

