以下代码需要您的帮助。我的df1带有要与df2合并的汇率和日期列。 df1缺少汇率值(在周末和节假日)。对于周末的汇率值,我想使用最后一个可用的值(例如,如果2019-05-01的汇率是nan,我希望它使用2019-04-01的汇率值)。我尝试了两个选项失败:
这都是两个数据框(如果复制并粘贴它,则会出现无法识别时间戳名称的错误。由于我总是将日期值作为TimeStamp对象,因此无法将日期值粘贴到此处)。希望您能帮我解决这两个问题,因为我敢肯定,这对您很有帮助。
df1={'Fecha': {0: Timestamp('2019-01-01 00:00:00'),
1: Timestamp('2019-01-02 00:00:00'),
2: Timestamp('2019-01-03 00:00:00'),
3: Timestamp('2019-01-04 00:00:00'),
4: Timestamp('2019-01-05 00:00:00'),
5: Timestamp('2019-01-06 00:00:00'),
6: Timestamp('2019-01-07 00:00:00'),
7: Timestamp('2019-01-08 00:00:00'),
8: Timestamp('2019-01-09 00:00:00'),
9: Timestamp('2019-01-10 00:00:00')},
'ER': {0: nan,
1: 19.1098,
2: 19.2978,
3: 19.2169,
4: nan,
5: nan,
6: 19.076,
7: 19.1627,
8: nan,
9: 19.7792}}
df2={'Fecha': {0: Timestamp('2019-01-01 00:00:00'),
1: Timestamp('2019-01-02 00:00:00'),
2: Timestamp('2019-01-03 00:00:00'),
3: Timestamp('2019-01-04 00:00:00'),
4: Timestamp('2019-01-05 00:00:00'),
5: Timestamp('2019-01-06 00:00:00'),
6: Timestamp('2019-01-07 00:00:00'),
7: Timestamp('2019-01-08 00:00:00'),
8: Timestamp('2019-01-09 00:00:00'),
9: Timestamp('2019-01-10 00:00:00')},
'letters': {0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
5: "f",
6: "g",
7: "h",
8: "i",
9: "j"}}
非常感谢!
答案 0 :(得分:1)
我认为您不需要lambda(如您在评论中所述)。您要实现的目标可以通过.ffill
方法完成:
>>> df1["ER"].ffill()
0 NaN
1 19.1098
2 19.2978
3 19.2169
4 19.2169
5 19.2169
6 19.0760
7 19.1627
8 19.1627
9 19.7792
Name: ER, dtype: float64
要合并两个数据框,请使用pd.merge
:
>>> df1["ER"].ffill(inplace=True)
>>> pd.merge(df1, df2, on="Fecha")
Fecha ER letters
0 2019-01-01 NaN a
1 2019-01-02 19.1098 b
2 2019-01-03 19.2978 c
3 2019-01-04 19.2169 d
4 2019-01-05 19.2169 e
5 2019-01-06 19.2169 f
6 2019-01-07 19.0760 g
7 2019-01-08 19.1627 h
8 2019-01-09 19.1627 i
9 2019-01-10 19.7792 j
答案 1 :(得分:0)
只是常识:
在您的示例数据中,它将为未识别的“时间戳”和“ nan”引发错误。要使此数据集可用,您只需在时间戳记之前添加pandas
或pd
:
pd.Timestamp('2019-01-06 00:00:00')
要表示空值,可以使用:
# First option - pandas system
import pandas as pd
{0: pd.NA}
# Second option - numpy system
import numpy as np
{0: np.nan}
# Third oprtion - Pure python
{0: None}
答案 2 :(得分:0)
我找到了一种使用pd.merge_asof()函数实现此目的的方法。如果找不到要合并的键值,则会为您提供上一个键值。不过,排序至关重要。
它的工作方式与excel查找相同(不是VLOOK UP,而是LOOKUP-没有v或h-)。
谢谢大家!