Python 如何将列复制到具有类似索引的另一个数据帧
我有一个数据框,如下所示。我使用Python 如何将列复制到具有类似索引的另一个数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,如下所示。我使用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
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,没有任何东西可以向前填充,所以我猜它最终将为零。我很难找到正确的函数来做这件事,寻找一些指导。谢谢。请尝试以下操作:
>>> 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
请尝试以下操作:
>>> 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
您可以执行以下操作:
#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
您可以执行以下操作:
#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
我假设您的第一个数据帧是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
然后创建一个新的dataframe,它将基于Date列包含两个dataframe列
main\u df=pd.merge(df1,df2,on=“Date”,how=“left”)
df1['Average']=主_df['Average']
df1=pd.DataFrame(df1,列=['Date','count','compound_mean','Average'])
然后可以用ffill填充空值,也可以用0填充前3个空值
df1.fillna(method='ffill',inplace=True)
df1.fillna(0,原地=真)
您的第一个数据帧将看起来像您想要的我假设您的第一个数据帧是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
然后创建一个新的dataframe,它将基于Date列包含两个dataframe列
main\u df=pd.merge(df1,df2,on=“Date”,how=“left”)
df1['Average']=主_df['Average']
df1=pd.DataFrame(df1,列=['Date','count','compound_mean','Average'])
然后可以用ffill填充空值,也可以用0填充前3个空值
df1.fillna(method='ffill',inplace=True)
df1.fillna(0,原地=真)
您的第一个数据帧将查看您想要的日期。只需获取日期。谢谢您,Prakash,为每一步所做的解释。这就是我想要做的。谢谢你,Prakash,对每一步所做的解释。这实现了我想要做的。