使用多级索引列合并DataFrame

3

我可以帮您翻译有关IT技术的内容。将来自不同数据源的数据下载到数据框中,希望将它们合并成一个最终数据框。以下是一个例子:

数据框1(已经拥有多级索引列)

Original Answer: "最初的回答"

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    ...     ...
...

我希望将两个数据框合并,并为数据框2中的数据指定列名。由于两个数据框的索引日期可能不同,因此我可能需要进行内部合并。

期望输出(多层次索引列)

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       ...                     ...
...

你能为1)2)添加预期输出吗?为什么需要使用示例数据进行内连接?也许需要更改数据以创建最小、完整和可验证的示例,特别是对于2) - jezrael
嗨,我把2)删掉了,因为我解决了这个问题。我需要进行“内连接”操作,因为数据帧之间的日期可能不匹配。但是我可以通过使用数据帧之间的交集日期来重新切片新的数据帧来克服这个问题。 - lucaschn
1个回答

3

使用:

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')

使用Index.intersection获取两个索引中相同的值:

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

df2中使用MultiIndex.from_product创建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

使用 DataFrame.loc 过滤两个数据框,使用 DataFrame.join 合并它们,最后使用 DataFrame.sort_indexMultiIndex 进行排序:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接