在Python中组合具有不同日期范围的多列

2024-04-27 00:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个具有不同日期范围(开始日期不同)的股票价格数据帧作为索引。下面是三个例子。你知道吗

Dataframe #1:
Date
12/15/1980      0.3936
12/16/1980      0.3648
12/17/1980      0.3738
12/18/1980      0.3846
12/19/1980      0.4081
...             ... 
09/21/2018      151.2600

Dataframe #2:
10/26/1993     0.7862
10/28/1993     0.7483
10/29/1993     0.7578
11/01/1993     0.7956
11/02/1993     0.7956
...            ...
09/21/2018     51.2000

Dataframe #3:
Date
10/26/1996      0.7862
10/28/1996      0.7483
10/29/1996      0.7578
11/01/1996      0.7956
11/02/1996      0.7956
...            ...
09/21/2018      36.5032

我想把这些数据帧组合成一个以日期为索引的表。对于没有特定日期数据的股票,“单元格”将为空。你知道吗

我有几百个这样的数据帧。如果有人能帮我解决这个问题,我将不胜感激!你知道吗


Tags: 数据dataframedate例子股票股票价格
2条回答

使用^{}

dfs = [df1, df2, df3]
df = pd.concat(dfs, axis=1)
df.index = pd.to_datetime(df.index, format='%m/%d/%Y')
#if need sorted DatetimeIndex
#df = df.sort_index()
print (df)
                   a        b        c
2018-09-21  151.2600  51.2000  36.5032
1993-10-26       NaN   0.7862      NaN
1996-10-26       NaN      NaN   0.7862
1993-10-28       NaN   0.7483      NaN
1996-10-28       NaN      NaN   0.7483
1993-10-29       NaN   0.7578      NaN
1996-10-29       NaN      NaN   0.7578
1993-11-01       NaN   0.7956      NaN
1996-11-01       NaN      NaN   0.7956
1993-11-02       NaN   0.7956      NaN
1996-11-02       NaN      NaN   0.7956
1980-12-15    0.3936      NaN      NaN
1980-12-16    0.3648      NaN      NaN
1980-12-17    0.3738      NaN      NaN
1980-12-18    0.3846      NaN      NaN
1980-12-19    0.4081      NaN      NaN

另一种解决方案是使用list comprehensionconcat之前创建DatetimeIndex-然后输出DatetimeIndex也被排序:

dfs = [df1, df2, df3]
dfs1 = [x.set_index(pd.to_datetime(x.index, format='%m/%d/%Y')) for x in dfs]
df = pd.concat(dfs1, axis=1)
print (df)
                   a        b        c
1980-12-15    0.3936      NaN      NaN
1980-12-16    0.3648      NaN      NaN
1980-12-17    0.3738      NaN      NaN
1980-12-18    0.3846      NaN      NaN
1980-12-19    0.4081      NaN      NaN
1993-10-26       NaN   0.7862      NaN
1993-10-28       NaN   0.7483      NaN
1993-10-29       NaN   0.7578      NaN
1993-11-01       NaN   0.7956      NaN
1993-11-02       NaN   0.7956      NaN
1996-10-26       NaN      NaN   0.7862
1996-10-28       NaN      NaN   0.7483
1996-10-29       NaN      NaN   0.7578
1996-11-01       NaN      NaN   0.7956
1996-11-02       NaN      NaN   0.7956
2018-09-21  151.2600  51.2000  36.5032
dflist = [df1, df2, df3 ...]

for df in dflist:
    df.index = pd.to_datetime(df.index,errors ='coerce')

df_all = pd.concat([[df1, df2, df3 ..]],axis=1)

相关问题 更多 >