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

基于行值筛选(取较小值)从两个DataFrame生成新DataFrame的问询

嘿,这事儿用pandas分分钟就能搞定!我来给你一步步拆解实现方法,包括你提到的平局处理逻辑~

首先,先把你给出的两个DataFrame用代码还原出来,方便直接测试:

import pandas as pd
import numpy as np

# 构造第一个DataFrame
df1 = pd.DataFrame({
    'Name': ['A1', 'A2', 'A3', 'A4'],
    'Value': [1, 2, 0, -3]
})

# 构造第二个DataFrame
df2 = pd.DataFrame({
    'Name': ['B1', 'B2', 'B3', 'B4'],
    'Value': [1, -1, -10, 4]
})

方法一:平局时选取首个出现的行(你的需求默认方案)

因为我们是逐行对应比较(df1第1行和df2第1行比,以此类推),所以第一步先把两个DataFrame按索引对齐合并,同时重命名列名避免冲突:

# 重命名列,区分两个DataFrame的内容
df1.columns = ['Name1', 'Value1']
df2.columns = ['Name2', 'Value2']

# 按列合并,确保每行对应位置正确
combined_df = pd.concat([df1, df2], axis=1)

接下来用numpy.where做矢量化判断——这比循环或apply效率高得多,适合大数据量:

  • 如果Value1小于等于Value2,就选df1的Name和Value
  • 否则选df2的内容
# 确定每行要选中的Name和Value
combined_df['Selected_Name'] = np.where(combined_df['Value1'] <= combined_df['Value2'], combined_df['Name1'], combined_df['Name2'])
combined_df['Selected_Value'] = np.where(combined_df['Value1'] <= combined_df['Value2'], combined_df['Value1'], combined_df['Value2'])

# 提取结果列,得到最终的DataFrame
final_df = combined_df[['Selected_Name', 'Selected_Value']].rename(columns={
    'Selected_Name': 'Name',
    'Selected_Value': 'Value'
})

print(final_df)

运行后输出正好符合你的期望:

Name  Value
0   A1      1
1   B2     -1
2   B3    -10
3   A4     -3

方法二:平局时随机选取任意一行

如果想要在平局时随机选df1或df2的行,可以用apply结合随机选择逻辑:

def pick_row(row):
    if row['Value1'] < row['Value2']:
        return (row['Name1'], row['Value1'])
    elif row['Value1'] > row['Value2']:
        return (row['Name2'], row['Value2'])
    else:
        # 随机选0(对应df1)或1(对应df2)
        pick = np.random.choice([0, 1])
        return (row['Name1'], row['Value1']) if pick == 0 else (row['Name2'], row['Value2'])

# 应用函数到每一行,生成结果
random_final_df = combined_df.apply(pick_row, axis=1, result_type='expand')
random_final_df.columns = ['Name', 'Value']

print(random_final_df)

每次运行这段代码,平局的第0行可能输出A1 1或者B1 1,完全随机。

内容的提问来源于stack exchange,提问作者eternity1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:07:15