【问题标题】:merging two data frames on two different columns based on condition根据条件合并两个不同列上的两个数据框
【发布时间】:2020-10-20 15:43:56
【问题描述】:

我需要在两个数据帧之间合并,但基于一个条件,因此当我尝试使用这样的 if 条件时,输出将是基于该条件的 2 个不同列上的合并数据帧

if RSRP_cal['new'] > 90 or RSRP_cal['new'] < -90 :
    RSRP_new = pd.merge(RSRP_cal , tilt ,left_on = 'int_theta',  right_on='mapped_neg_tilt_angle' ,how = 'left')
else:
    RSRP_new = pd.merge(RSRP_cal , tilt ,left_on = 'int_theta',  right_on='mapped_tilt_angle' ,how = 'left')

出现此错误:

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

【问题讨论】:

  • 您正在尝试将整个系列(新列中的所有“单元格”)与单个值进行比较,这就是错误的原因。如果您的条件表明 Series 中的 anyall 值必须介于 -90 和 90 之间才能将 Dataframes 与 int_theta 和 mapped_neg_tilt_angle ID 合并,然后使用 RSRP_cal['new '].any() > 90 或 RSRP_cal['new'].any() (如果每个值都必须在限制范围内,则为 all)。如果您只想合并满足条件的行,请改用掩码(就像在 Grzegorz 的分析器中一样)

标签: python pandas


【解决方案1】:

怎么样:

mask = RSRP_cal['new'].abs().gt(90)

RSRP_new = pd.merge(RSRP_cal.loc[mask] , tilt , /
    left_on = 'int_theta',  right_on='mapped_neg_tilt_angle' , /
    how = 'left')

RSRP_new = pd.concat([RSRP_new, /
    pd.merge(RSRP_cal.loc[~mask], tilt, /
    left_on = 'int_theta',  right_on='mapped_tilt_angle', /
    how = 'left')])

【讨论】:

    【解决方案2】:

    我不确定,但是如果合并参数是正确的,如果每次都有真实值(>90 或

    【讨论】:

    • 合并参数是正确的,但我的问题是,如果 RSRP 中列(新)中的值 >90 或
    【解决方案3】:

    这个问题似乎有点不清楚。添加更多细节肯定会有所帮助。但是现在,根据您提到的细节,您正在尝试将 RSRP_cal 与倾斜合并。 根据您的说法,函数merge的用法是pd.merge,但正确的格式是,

    temp = RSRP_cal.merge(tilt ,left_on = 'int_theta', right_on='mapped_neg_tilt_angle' ,how = 'left'))
    

    让我知道它是否有效。

    【讨论】:

    • 我需要将 RSRP_cal 与倾斜合并,但基于一个条件,如果 RSRP 中的列(新)中的值 >90 或
    猜你喜欢
    • 2022-08-19
    • 2021-09-18
    • 2021-10-24
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多