You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码说明

  1. 优先级标记:给df1和df2分别添加priority列,df2标记为0(优先级更高),df1标记为1,确保同一Extracted_Code分组内df2的行排在开头。
  2. 合并数据:使用pd.concat合并所有行,包括df2中与df1不匹配的Extracted_Code条目(如45672134)。
  3. 排序整理:先按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:21