Pandas使用索引进行除法
我有时候对pandas的数据结构感到有点困惑,这次又遇到了问题。简单来说,我有:
- 一个透视表,主要的轴是一个序列号
- 一个使用相同索引的系列
我想把透视表的每一列都除以这个系列中对应索引的值,以便匹配行。我尝试了很多组合……但到现在为止都没有成功 :/
import pandas as pd
df = pd.DataFrame([['123', 1, 1, 3], ['456', 2, 3, 4], ['123', 4, 5, 6]], columns=['A', 'B', 'C', 'D'])
pt = pd.pivot_table(df, rows=['A', 'B'], cols='C', values='D', fill_value=0)
serie = pd.Series([5, 5, 5], index=['123', '678', '345'])
pt.div(serie, axis='index')
但是我得到的结果都是NaN。我猜这可能是因为列名不匹配,但我之所以使用索引作为轴就是为了这个原因。你们觉得我哪里做错了?
谢谢
1 个回答
1
你说“使用相同的索引”,但其实它们并不一样:pt
有一个多重索引,而serie
只有一个普通的索引。
>>> pt.index
MultiIndex(levels=[[u'123', u'456'], [1, 2, 4]],
labels=[[0, 0, 1], [0, 2, 1]],
names=[u'A', u'B'])
而且你没有告诉计算机,你想要在索引的A
部分对齐。你可以通过使用level
来传递这个信息:
>>> pt.div(serie, level='A', axis='index')
C 1 3 5
A B
123 1 0.6 0 0.0
4 0.0 0 1.2
456 2 NaN NaN NaN
[3 rows x 3 columns]