Pandas:基于条件在指定位置将DataFrame行插入另一DataFrame
解决方案
可以通过添加优先级标记结合分组排序的方式,高效实现需求,具体步骤如下:
实现代码
import pandas as pd df1 = pd.DataFrame({'BarCode': ['12345678ABCD', '67890123ABCD', '12345678DEFG', '67890123DEFG'], 'Description': ['Apples', 'Milk', 'Oranges', 'Yoghurt'], 'Quantity': [99, 77, 10, 52], 'Price': [12.0, 10.5, 11.0, 15.6], 'Extracted_Code': ['12345678', '67890123', '12345678', '67890123']}) df2 = pd.DataFrame({'BarCode': ['123456780000', '678901230000', '456721340000'], 'Description': ['BarCode1', 'BarCode2', 'BarCode3'], 'Extracted_Code': ['12345678', '67890123', '45672134']}) # 添加优先级列,确保df2的行在分组中排在最前 df1['priority'] = 1 df2['priority'] = 0 # 合并两个DataFrame,保留所有行 combined_df = pd.concat([df1, df2], ignore_index=True) # 按分组和优先级排序,得到目标顺序 result = combined_df.sort_values( by=['Extracted_Code', 'priority'], ascending=[True, True], ignore_index=True ).drop('priority', axis=1) print(result)
代码说明
- 优先级标记:给df1和df2分别添加
priority列,df2标记为0(优先级更高),df1标记为1,确保同一Extracted_Code分组内df2的行排在开头。 - 合并数据:使用
pd.concat合并所有行,包括df2中与df1不匹配的Extracted_Code条目(如45672134)。 - 排序整理:先按
Extracted_Code升序分组,再按priority升序排序,最后删除临时的priority列,得到符合要求的结果。
输出结果
BarCode Description Quantity Price Extracted_Code 0 123456780000 BarCode1 NaN NaN 12345678 1 12345678ABCD Apples 99.0 12.0 12345678 2 12345678DEFG Oranges 10.0 11.0 12345678 3 678901230000 BarCode2 NaN NaN 67890123 4 67890123ABCD Milk 77.0 10.5 67890123 5 67890123DEFG Yoghurt 52.0 15.6 67890123 6 456721340000 BarCode3 NaN NaN 45672134
内容的提问来源于stack exchange,提问作者Animeartist
相关产品推荐
相关产品推荐

