【发布时间】:2019-10-12 18:38:41
【问题描述】:
我正在尝试合并两个具有不同日期时间索引的 pandas 数据框。 DF1 是 XYZ 公司的季度财务报表,DF2 是 XYZ 股票公开交易股票的每日收盘价。
问题在于财务报告的发布日期并不总是与当前的每日收盘价配对(可能是因为该报告是在周末发布的)。
我需要一种方法来模糊 DF2 中的日期,这样当我将它们与 DF1 合并时,合并会从 DF2 中选择最接近的日期,而不是在合并中为收盘价留下空白。
目前使用:
df1 = [['2007-12-30','$xxx,xxx'],
['2008-03-30','$xxx,xxx'],
['2008-06-28','$xxx,xxx'],
['2008-09-29','$xxx,xxx'],
['2008-12-31','$xxx,xxx']]
df2 = [['2007-12-30','$45'],
['2008-03-30','$40'],
['2008-06-27','$38'],
['2008-09-29','$46'],
['2008-12-30','$50']]
df3 = pd.merge(df1, df2, how='outer', on='date')
返回:
df3 = [['2007-12-30','$xxx,xxx', '$45'],
['2008-03-30','$xxx,xxx', '$40'],
['2008-06-28','$xxx,xxx', 'NaN'],
['2008-09-29','$xxx,xxx', '$46'],
['2008-12-31','$xxx,xxx', 'Nan']]
希望它返回:
df3 = [['2007-12-30','$xxx,xxx', '$45'],
['2008-03-30','$xxx,xxx', '$40'],
['2008-06-28','$xxx,xxx', '$38'],
['2008-09-29','$xxx,xxx', '$46'],
['2008-12-31','$xxx,xxx', '$50']]
解决方案:
df3 = pd.merge(df1, df2, how='outer', on='date')\
.sort_index(ascending=False).fillna(method="ffill")
df3 = df3[df3.index.isin(df1.index)]
【问题讨论】:
标签: python pandas datetime-format