2017-01-17 6 views
1

DataFrameを列(Series)で分割したい場合は、両方がインデックスを共有しているため、結果に元の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 

感謝を。 axis=0

答えて

2

使用div、あなたがdivを使用して、明示的にそれがインデックスに沿って放送するaxis=0を渡す必要があり、したがって、あなたは0...9と、元の列を取得する列に並べるです:あなたは、関連を見ることができます

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?

関連する問題