如何按时间筛选DataFrame片段后与另一DataFrame进行关联?
解决DataFrame左关联匹配需求
嘿,这事儿用pandas的左连接就能轻松搞定!你的需求本质是要保留left表的所有行,同时把right表中匹配ID的f2、f3字段补进来,没匹配上的就用NaN填充,正好对应左连接(left join)的特性。
步骤1:构造示例数据
先把你给出的数据集用代码还原出来:
import pandas as pd left = pd.DataFrame({ 'ID': [1, 3, 7, 9, 2, 1, 3], 'f1': [10]*7, 'TIME': [1, 1, 1, 2, 2, 2, 2] }) right = pd.DataFrame({ 'ID': [1, 7], 'f2': [0, 9], 'f3': [11, 11] })
步骤2:执行左关联操作
直接用pd.merge()指定how='left',按ID字段匹配,就能得到你想要的结果:
result = pd.merge(left, right, on='ID', how='left')
验证结果
运行后输出的result完全符合你的期望:
| ID | f1 | TIME | f2 | f3 |
|---|---|---|---|---|
| 1 | 10 | 1 | 0 | 11 |
| 3 | 10 | 1 | NaN | NaN |
| 7 | 10 | 1 | 9 | 11 |
| 9 | 10 | 2 | NaN | NaN |
| 2 | 10 | 2 | NaN | NaN |
| 1 | 10 | 2 | 0 | 11 |
| 3 | 10 | 2 | NaN | NaN |
如果之后你需要先按TIME筛选left的子集再关联,也可以灵活调整,比如只保留TIME=1的数据:
filtered_left = left[left['TIME'] == 1] result_filtered = pd.merge(filtered_left, right, on='ID', how='left')
这样就能轻松满足不同的筛选+关联需求啦!
内容的提问来源于stack exchange,提问作者Guido Muscioni
相关产品推荐
相关产品推荐

