如何将df1的binfig字段合并到df2的区间(bins)数据中?
将df1的binfig字段匹配到df2的区间数据并关联
1. 预处理df2的区间字段
首先拆分df2中的bin列,提取区间的上下限数值,方便后续判断:
import pandas as pd # 示例数据 df1 = pd.DataFrame({"cust_id": ['ooo'], "amount": [1000], "group":[10], "binfig":[600]}) df2 = pd.DataFrame({"ID": ['x1','x2'], "bin":["600 to 650","651 to 670"]}) # 拆分区间字符串,转为整数类型的上下限列 df2[['lower', 'upper']] = df2['bin'].str.split(' to ', expand=True).astype(int)
2. 匹配区间并关联数据
可以通过交叉合并后过滤条件的方式,精准匹配binfig所属的区间,最终得到关联结果:
# 交叉合并两个数据集,再过滤符合区间条件的行 merged_df = df1.assign(key=1).merge(df2.assign(key=1), on='key').drop('key', axis=1) merged_df = merged_df[(merged_df['binfig'] >= merged_df['lower']) & (merged_df['binfig'] <= merged_df['upper'])]
3. 最终输出结果
执行上述代码后,merged_df即为关联后的数据集:
cust_id amount group binfig ID bin lower upper 0 ooo 1000 10 600 x1 600 to 650 600 650
如果数据量较大,想要更高效的映射方式,可以使用pd.cut直接匹配区间对应的ID:
# 构造区间边界,包含最低值确保匹配 bins = [df2['lower'].min() - 1] + df2['upper'].tolist() + [df2['upper'].max() + 1] df1['matched_ID'] = pd.cut(df1['binfig'], bins=bins, labels=df2['ID'], include_lowest=True)
内容的提问来源于stack exchange,提问作者user1000x
相关产品推荐
相关产品推荐

