【问题标题】:Merge two dataframes with interval of columns合并两个具有列间隔的数据框
【发布时间】:2023-01-26 19:10:11
【问题描述】:
我有两个数据框,我想合并它们,但将其中一个数据框的值放在另一个数据框中。我该怎么做?
数据框 1:
| Date |
dif |
| 2023-01-01 |
-5.0 |
| 2023-01-02 |
-4.0 |
| 2023-01-03 |
0.0 |
| 2023-01-04 |
1.0 |
数据框 2:
| Porcentaje |
Inc |
| -3.0 |
0.0 |
| 1.0 |
2.0 |
结果:
| Date |
dif |
Inc |
| 2023-01-01 |
-5.0 |
0.0 |
| 2023-01-02 |
-4.0 |
0.0 |
| 2023-01-03 |
0.0 |
2.0 |
| 2023-01-04 |
1.0 |
2.0 |
结果必须是两个 df 之间以 dif 和 de Porcentaje 的间隔合并。例如,如果 dif < -3.0,则 Inc 将为 0.0。
在此示例中,dif 永远不会大于 porcentaje 的最大值 = 1.0
【问题讨论】:
标签:
python-3.x
pandas
dataframe
【解决方案1】:
这是merge_asof:
out = pd.merge_asof(df1.sort_values(by='dif'),
df2.sort_values('Porcentaje'),
left_on='dif', right_on='Porcentaje',
direction='forward')
输出:
Date dif Porcentaje Inc
0 2023-01-01 -5.0 -3.0 0.0
1 2023-01-02 -4.0 -3.0 0.0
2 2023-01-03 0.0 1.0 2.0
3 2023-01-04 1.0 1.0 2.0
您可以通过首先使用 rename 来匹配 df1 中的键来避免使用 Porcentaje 列:
out = pd.merge_asof(df1.sort_values(by='dif'),
df2.sort_values('Porcentaje')
.rename(columns={'Porcentaje': 'dif'}),
on='dif', direction='forward')
输出:
Date dif Inc
0 2023-01-01 -5.0 0.0
1 2023-01-02 -4.0 0.0
2 2023-01-03 0.0 2.0
3 2023-01-04 1.0 2.0