我有一个如下所示的 Pandas 数据框。我使用 pd.to_datetime(df['date']).dt.normalize()
来获取 date2 列以仅显示日期并忽略时间。不知道如何让它只是 YYYY-MM-DD 格式。
date2 count compound_mean
0 2021-01-01 00:00:00+00:00 18 0.188411
1 2021-01-02 00:00:00+00:00 9 0.470400
2 2021-01-03 00:00:00+00:00 10 0.008190
3 2021-01-04 00:00:00+00:00 58 0.187510
4 2021-01-05 00:00:00+00:00 150 0.176173
具有以下格式的另一个数据框。
Date Average
2021-01-04 18.200001
2021-01-05 22.080000
2021-01-06 22.250000
2021-01-07 22.260000
2021-01-08 21.629999
我希望通过匹配日期然后向前填充任何空白值,使 Average
列显示在第一个数据框中。从 01-01 到 01-03 将没有任何东西可以向前填充,所以我猜它最终会为零。我无法找到合适的 Pandas 函数来执行此操作,正在寻找一些指导。谢谢。
答案 0 :(得分:1)
尝试以下操作:
>>> df.index = pd.to_datetime(df.date2).dt.date
# If df.date2 is already datetime, use ^ df.index = df.date2.dt.date
>>> df2['Date'] = pd.to_datetime(df2['Date'])
# If df2['Date'] is already datetime, ^ this above line is not needed
>>> df.join(df2.set_index('Date')).fillna(0)
date2 count compound_mean Average
date2
2021-01-01 2021-01-01 00:00:00+00:00 18 0.188411 0.000000
2021-01-02 2021-01-02 00:00:00+00:00 9 0.470400 0.000000
2021-01-03 2021-01-03 00:00:00+00:00 10 0.008190 0.000000
2021-01-04 2021-01-04 00:00:00+00:00 58 0.187510 18.200001
2021-01-05 2021-01-05 00:00:00+00:00 150 0.176173 22.080000
答案 1 :(得分:1)
您可以执行merge操作如下:
#Making date of same UTC format from both tables
df1['date2'] = pd.to_datetime(df1['date2'],utc = True)
df2['Date'] = pd.to_datetime(df2['Date'],utc = True)
#Renaming df1 column so that we can map 'Date' from both dataframes
df1.rename(columns={'date2': 'Date'},inplace=True)
#Merge operation
res = pd.merge(df1,df2,on='Date',how='left').fillna(0)
输出:
Date count compound_mean Average
0 2021-01-01 00:00:00+00:00 18 0.188411 0.000000
1 2021-01-02 00:00:00+00:00 9 0.470400 0.000000
2 2021-01-03 00:00:00+00:00 10 0.008190 0.000000
3 2021-01-04 00:00:00+00:00 58 0.187510 18.200001
4 2021-01-05 00:00:00+00:00 150 0.176173 22.080000
答案 2 :(得分:1)
我假设您的第一个数据帧是 df1,第二个数据帧是 df2。
首先,您需要将 df1 的 date2 列的名称更改为 Date,使其与您的 df2 的 Date 列匹配。
df1['Date'] = pd.to_datetime(df1['date2']).dt.date
然后您可以将 df1 的 date2 列删除为
df1.drop("date2",inplace=True, axis=1)
您还需要更改df2的Date列类型,使其与df1的Date列的类型匹配
df2['Date'] = pd.to_datetime(df2['Date']).dt.date
然后创建一个新的数据框,其中将包含基于日期列的两个数据框列。
main_df = pd.merge(df1,df2,on="Date", how="left")
df1['Average'] = main_df['Average']
df1 = pd.DataFrame(df1, columns = ['Date', 'count','compound_mean','Average'])
然后你可以用 ffill 填充空值,也可以用 0 填充前 3 个空值
df1.fillna(method='ffill', inplace=True)
df1.fillna(0, inplace=True)
您的第一个数据框将看起来像您想要的