Pandas使用索引进行除法

0 投票
1 回答
658 浏览
提问于 2025-04-18 02:27

我有时候对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]

撰写回答