【发布时间】:2022-01-23 22:03:31
【问题描述】:
我正在尝试执行一种多步骤方式,使用现有数据框中的值来创建子数据框(或系列),并将这些值与现有数据框进行比较,最终在原始数据框中创建一个新列。
一步一步的过程是:
- 创建一个数据帧,根据原始数据帧 df1 中的日期隔离每个月内的最小日期 (df2),并且已成功创建。
- 第二步是将 actual_date (df1) 匹配到 min_date (df2) 的位置,然后取 extract_value ( df1) 并将其存储在 df1 中,用于实际日期与 min_date 匹配的所有实例。
我尝试过但收到错误的一些尝试是: 比较 dfs 之间的日期值:
df1.loc[df1['actual_date']==df2[df2['min_date']]
#Produces unexpected EOF while parsing
df['actual_date']==df2['min_date']
#Produces ValueError: Can only compare identically-labeled Series objects
遍历条件:
for each in range(len(df1):
if df1[df1['actual_date']]==df2[df2['min_date']]:
df1['exctract_value_new']=df2['extract_value']
#Produces: KeyError: "None of [DatetimeIndex....are in the [columns]"
我已尝试搜索值和键错误,但无法理解有关索引的线程。具体来说,我不确定如何重新格式化 df1 和/或 df2 以便以这种方式比较日期值,然后根据两个数据帧中的条件何时匹配来提取单独的列。
这是使用的示例数据:
df1(基础)
| actual_date | extract_value |
|---|---|
| 2021-01-22 | 22 |
| 2021-01-23 | 24 |
| 2021-01-24 | 15 |
| 2021-02-22 | 16 |
| 2021-02-05 | 34 |
| 2021-02-04 | 18 |
df2
| month | min_date |
|---|---|
| 2021-01-01 | 2021-01-22 |
| 2021-02-01 | 2021-02-04 |
| 2021-03-01 | 2021-03-01 |
df1 的最终目标
| actual_date | min_date | extract_value_new | extract_value_original |
|---|---|---|---|
| 2021-01-22 | 2021-01-22 | 22 | 22 |
| 2021-01-23 | 2021-01-22 | 22 | 24 |
| 2021-02-04 | 2021-02-04 | 18 | 18 |
| 2021-02-05 | 2021-02-04 | 18 | 34 |
感谢任何帮助!
【问题讨论】:
-
我不记得怎么做,总是出现在这个页面上:pandas.pydata.org/pandas-docs/stable/user_guide/merging.html