将数据帧与多索引列合并

2024-10-01 11:32:40 发布

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

我在DataFrame中下载了来自不同来源的数据,并希望将它们合并到一个最终的DataFrame中。让我们用下面的例子来说明:

数据帧1(已经有多个索引列)

index    stockA        stockB      ...
        O  L  H  C    O  L  H  C
1/1/19  10 15 20 17  35 30 39 37
2/1/19  ...          ...
...

数据帧2(非多索引列)

index    stockA  stockB     
1/1/19    1.5     3.2 
2/1/19    ...     ...
...

我想合并dataframe并为dataframe2中的数据指定一个列名。两个数据帧中的索引日期可能不相同,因此可能需要进行内部合并。你知道吗

预期产出(多索引列)

index    stockA                 stockB             ...
        O  L  H  C new_col    O  L  H  C  new_col
1/1/19  10 15 20 17 1.5       35 30 39 37  3.2
2/1/19       ...                     ...
...

Tags: 数据dataframenewindex来源col例子dataframe2
1条回答
网友
1楼 · 发布于 2024-10-01 11:32:40

用途:

print (df1)
       stockA             stockB            
            O   L   H   C      O   L   H   C
1/1/19     10  15  20  17     35  30  39  37
2/1/19     12  13  26  27     31  50  29  17

print (df2)
        stockA  stockB
2/1/19     1.5     3.2
3/1/19     1.2     6.2

如有必要,将两个index中的索引转换为datetime

df1.index = pd.to_datetime(df1.index, format='%d/%m/%y')
df2.index = pd.to_datetime(df2.index, format='%d/%m/%y')

通过^{}在两个索引中获得相同的值:

idx = df1.index.intersection(df2.index)
print (idx)
DatetimeIndex(['2019-01-02'], dtype='datetime64[ns]', freq=None)

df2^{}中创建MultiIndex

df2.columns = pd.MultiIndex.from_product([df2.columns, ['new']])
print (df2)
           stockA stockB
              new    new
2019-01-02    1.5    3.2
2019-01-03    1.2    6.2

^{}过滤两个数据帧,按^{}连接在一起,最后按^{}排序MultiIndex

df = df1.loc[idx].join(df2.loc[idx]).sort_index(level=0, axis=1)
print (df)
           stockA                  stockB                 
                C   H   L   O  new      C   H   L   O  new
2019-01-02     27  26  13  12  1.5     17  29  50  31  3.2

相关问题 更多 >