2016-03-20 16 views
0

パンダのixセレクタでわからないことがあります。パンダで重複したインデックスを持つ奇妙なix選択

は、以下の点を考慮しデータフレーム

dfnu=pd.DataFrame({'A':[7,1,2,3,4],'B':[7,8,9,1,1]},index=list('AABCD')) 

ここで起こっている今、この出力

dfnu['A']<2 
Out[128]: 
A False 
A  True 
B False 
C False 
D False 
Name: A, dtype: bool 


dfnu['test']=dfnu.ix[dfnu['A']<2,'A'] 
dfnu 
Out[127]: 
    A B test 
A 7 7  1 
A 1 8  1 
B 2 9 NaN 
C 3 1 NaN 
D 4 1 NaN 

を見て?なぜ地球上でtestは最初の行で1に等しいですか?

+0

を望んでいた結果が得られますdfnu.A <2、 'test'] = 1'の場合、結果は – MaxU

答えて

1

1行のみ< 2であるので、dfnu.ix[dfnu['A'<2, 'A']は、唯一の値を有する:あなたはdfnuにこのバックを割り当てると

>>> dfnu.ix[dfnu['A']<2, 'A'] 
A 1 
Name: A, dtype: int64 

、値がインデックスに一致しています。つまり、上記の1行にはAがインデックスとして含まれているため、元のDataFrameのすべての行にはAのインデックスに値(1)が割り当てられます。これはまた、他の行に対してNaNを取得する理由です。インデックスとしてAがないため、値は割り当てられません。

+0

ありがとうございます。 'dfnu ['test'] = dfnu.ix [dfnu ['A'] <2、 'A']'という行は、行ごとに単純なマッチングによって影響を受ける値だと考えました。つまり、左側の最初の行は左側の最初の行に等しくなります(インデックスは含まれません)。これは間違っていますか? –

+1

@ノービー:あなたの例のように、左側に5行、右側に1つのみがある場合、どのように動作すると思いますか? – BrenBarn

+0

わかりました。私が思いついたのは 'dfnu.ix [dfnu ['A'] <2、 'test2'] = dfnu.ix [dfnu ['A'] <2、 'A']'です。ダン、パンダは力がありますが、時には落ち着きません;-) –

1

あなたはこのようにそれを行うことができます:[ `dfnu.ix:

dfnu.ix[dfnu.A < 2, 'test'] = 1 

出力

In [289]: dfnu 
Out[289]: 
    A B 
A 7 7 
A 1 8 
B 2 9 
C 3 1 
D 4 1 

In [290]: dfnu.ix[dfnu.A < 2, 'test'] = 1 

In [291]: dfnu 
Out[291]: 
    A B test 
A 7 7 NaN 
A 1 8 1.0 
B 2 9 NaN 
C 3 1 NaN 
D 4 1 NaN 

は、それはあなたがあなたがそれをこのように使用したい

関連する問題