如何按ID将DataFrame间的值复制应用到对应分组的所有行?
用Pandas快速实现一对多数据合并
看起来你需要把DF2里每个参与者的单行补充数据,批量映射到DF1对应参与者的所有观测行里——这在数据分析里是非常常见的一对多合并场景,用Pandas的merge方法就能轻松搞定,具体步骤如下:
1. 先确保导入Pandas
如果还没导入库的话,先执行这行:
import pandas as pd
2. 执行左连接合并
核心代码就一行,通过id列把两个DataFrame关联起来,how='left'会保证DF1的所有行都被保留,同时自动把DF2的对应字段复制到每一行:
merged_df = pd.merge(DF1, DF2, on='id', how='left')
合并后的效果
运行完上面的代码,你会得到这样的结果(用表格直观展示):
| id | blocktype | condition | blocknr | markodd | taskorder | exporder |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 0 | 1 | 1 |
| 1 | 3 | 2 | 2 | 0 | 1 | 1 |
| 1 | 3 | 3 | 2 | 0 | 1 | 1 |
| 2 | 1 | 2 | 1 | 0 | 2 | 1 |
| 2 | 1 | 1 | 2 | 0 | 2 | 1 |
| 2 | 1 | 1 | 2 | 0 | 2 | 1 |
| 3 | 4 | 1 | 1 | 0 | 1 | 2 |
| 3 | 1 | 1 | 2 | 0 | 1 | 2 |
| 3 | 2 | 1 | 2 | 0 | 1 | 2 |
补充说明
- 之所以用
how='left':是为了确保DF1里的所有观测记录都不会丢失,哪怕DF2里没有对应id的数据(当然你的案例里每个id都有匹配,不过这是通用的稳妥做法) - 如果两个DataFrame的id列名不一样:比如DF1里是
participant_id,DF2里是id,可以用left_on和right_on分别指定关联字段:merged_df = pd.merge(DF1, DF2, left_on='participant_id', right_on='id', how='left')
内容的提问来源于stack exchange,提问作者Bartosz M
相关产品推荐
相关产品推荐

