基于两个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
相关产品推荐
相关产品推荐

