Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列复制到具有类似索引的另一个数据帧_Python_Pandas_Dataframe - Fatal编程技术网

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,对每一步所做的解释。这实现了我想要做的。