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
这篇关于如何对多索引数据帧进行重新索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何对多索引数据帧进行重新索引
基础教程推荐
猜你喜欢
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 如何将RPC与Volttron配合使用 2022-09-21
- 如何防止Groupby超越指数? 2022-09-22
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21