How to reindex a MultiIndex dataframe(如何对多索引数据帧进行重新索引)
本文介绍了如何对多索引数据帧进行重新索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否有办法对(不同级别的)两个数据帧重新编制索引,以便它们在所有级别上共享一个公共索引?
演示:
创建名为‘A’的基本数据帧:
index = np.array(['AUD','BRL','CAD','EUR','INR'])
data = np.random.randint(1, 20, (5,5))
A = pd.DataFrame(data=data, index=index, columns=index)
创建名为‘B’的多索引数据帧:
np.random.seed(42)
midx1 = pd.MultiIndex.from_product([['Bank_1', 'Bank_2'],
['AUD','CAD','EUR']], names=['Bank', 'Curency'])
B = pd.DataFrame(np.random.randint(10,25,6), midx1)
B.columns = ['Notional']
基本df:
>>> Dataframe A:
AUD BRL CAD EUR INR
AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
多索引df:
>>> Dataframe B:
Notional
Bank Curency
Bank_1 AUD 16
CAD 13
EUR 22
Bank_2 AUD 24
CAD 20
EUR 17
目标是:
1)重新编制B的索引,使其货币级别包括A的索引中的每种货币。B将如下所示(请参阅BRL和INR,它们的理论值并不重要): Notional
Bank Curency
Bank_1 AUD 16
CAD 13
EUR 22
BRL 0
INR 0
Bank_2 AUD 24
CAD 20
EUR 17
BRL 0
INR 0
2)重新索引A,以使其包括B的索引的第一级中的每个银行。A将如下所示:
AUD BRL CAD EUR INR
Bank_1 AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
Bank_2 AUD 7 19 11 11 4
BRL 8 3 2 12 6
CAD 2 1 12 12 17
EUR 10 16 15 15 19
INR 12 3 5 19 7
此应用程序将在大得多的数据帧上应用,因此我需要一种蟒蛇般的方法来完成此操作。
对于上下文,我最终希望将A和B相乘。我正在尝试重新索引以获得匹配的索引,因为这是一种简单的方法,可以将各种索引级别的数据帧相乘: Pandas multiply dataframes with multiindex and overlapping index levels谢谢您的帮助。
推荐答案
使用reindex
获取B
B.reindex( pd.MultiIndex.from_product([B.index.levels[0],
A.index], names=['Bank', 'Curency']),fill_value=0)
Out[62]:
Notional
Bank Curency
Bank_1 AUD 16
BRL 0
CAD 13
EUR 22
INR 0
Bank_2 AUD 24
BRL 0
CAD 20
EUR 17
INR 0
使用concat
获取A
pd.concat([A]*2,keys=B.index.levels[0])
Out[69]:
AUD BRL CAD EUR INR
Bank
Bank_1 AUD 10 5 10 14 1
BRL 17 1 14 10 8
CAD 3 7 3 15 2
EUR 17 1 15 2 16
INR 7 15 6 7 4
Bank_2 AUD 10 5 10 14 1
BRL 17 1 14 10 8
CAD 3 7 3 15 2
EUR 17 1 15 2 16
INR 7 15 6 7 4
这篇关于如何对多索引数据帧进行重新索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何对多索引数据帧进行重新索引
猜你喜欢
- 如何命名HDF5数据集中的列? 2022-09-21
- 合并具有多个索引和列值的数据帧 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 基于多个一级列的子集多索引DataFrame 2022-09-22
- H5py:如何在HDF5组和数据集上使用key()循环 2022-09-21
- 为什么切换屏幕在Kivy中不起作用? 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 将文件从Azure文件加载到Azure数据库 2022-09-21
- 如何将属性添加到作为组存储在HDF5文件中的 pa 2022-09-21
- 使用带有CROSS_VAL_SCORE的自定义估计器失败 2022-09-21