2017-01-17 29 views
1

我想將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 

在此先感謝。

回答

2

使用divaxis=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 

你可以看到相關的問題:What does the term "broadcasting" mean in Pandas documentation?說明了廣播規則