我想用一个列(一个系列)划分一个DataFrame,它们都共享索引,所以我希望结果具有原始DataFrame的形状.
这段代码显示了我的所作所为:
import numpy as np import pandas as pd cols = ['A', 'B', 'C', 'D'] ix = range(10) df = pd.DataFrame(index=ix, columns=cols, data=np.random.randint(0, 100, size=(10, 4))) print(df / df['A'])
结果是这样的:
0 1 2 3 4 5 6 7 8 9 A B C D 0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 2 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 3 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 6 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 7 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 8 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 9 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
但我希望这样的事情:
A B C D 0 1 .. .. .. 1 1 .. .. .. 2 1 .. .. .. 3 1 .. .. .. 4 1 .. .. .. 5 1 .. .. .. 6 1 .. .. .. 7 1 .. .. .. 8 1 .. .. .. 9 89 94 14 44
提前致谢.
使用div
带axis=0
,它的排列在列,因此你得到的0...9
与原始列,你应该使用div
和明确地传递axis=0
,因此沿指数广播:
In [58]: , axis=0 df.div(df['A'], axis=0) Out[58]: A B C D 0 1.0 0.818182 1.681818 0.431818 1 1.0 1.562500 0.625000 1.468750 2 1.0 17.000000 5.400000 2.800000 3 1.0 9.428571 13.857143 8.285714 4 1.0 0.256098 0.085366 1.146341 5 1.0 27.000000 21.500000 7.500000 6 1.0 0.444444 1.236111 1.041667 7 1.0 0.268293 0.048780 1.146341 8 1.0 0.505051 0.434343 0.101010 9 1.0 0.673684 0.378947 0.873684
您可以看到一个相关问题:"广播"一词在Pandas文档中的含义是什么?这说明了广播规则