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

基于两个DataFrame变量创建条件新变量:仅为德州匹配肥胖率

解决方法:基于州和邮编匹配添加肥胖率变量

嘿,这个需求很明确,我们用pandas就能轻松搞定!核心思路是先把两个DataFrame按邮编关联,再根据州的条件来赋值,具体步骤如下:

1. 先模拟示例数据(方便你测试)

首先我们先创建和你描述一致的示例DataFrame,这样你可以直接跑代码看效果:

import pandas as pd
import numpy as np

# 示例DataFrame A
df_a = pd.DataFrame({
    'Zipcode': [33333, 11111, 77777],
    'Population': [700, 600, 500],
    'State': ['Texas', 'Oregon', 'Texas']
})

# 示例DataFrame B(包含全美邮编和肥胖率)
df_b = pd.DataFrame({
    'Zipcode': [33333, 77777, 11111, 99999],
    'obesity_rate': [32.5, 30.1, 25.8, 28.3]
})

2. 关联DataFrame并赋值新变量

我们先通过pd.merge做左连接,确保保留df_a的所有行,再用条件判断给新列赋值:

# 按Zipcode左连接两个DataFrame
merged_df = pd.merge(df_a, df_b, on='Zipcode', how='left')

# 新增obesity_rate列:Texas州取匹配到的肥胖率,其他州设为0
# 同时处理Texas州邮编未在df_b中匹配到的情况,这类记录也设为0
merged_df['obesity_rate'] = np.where(merged_df['State'] == 'Texas', 
                                     merged_df['obesity_rate'].fillna(0), 
                                     0)

3. 查看最终结果

运行完上面的代码后,merged_df就是你要的结果啦:

Zipcode  Population    State  obesity_rate
0    33333         700    Texas          32.5
1    11111         600   Oregon           0.0
2    77777         500    Texas          30.1

补充说明

  • 左连接(how='left')保证了df_a的所有行都被保留,不会因为邮编在df_b里不存在而丢失数据
  • 如果你更喜欢用loc实现条件赋值,也可以这么写,逻辑同样清晰:
    merged_df['obesity_rate'] = 0  # 先给所有行默认设为0
    # 单独给Texas州的行替换成匹配到的肥胖率,未匹配到的保持0
    tx_mask = merged_df['State'] == 'Texas'
    merged_df.loc[tx_mask, 'obesity_rate'] = merged_df.loc[tx_mask, 'obesity_rate'].fillna(0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:52:28