具有重复索引的pandas中的奇怪ix选择

时间:2016-03-20 19:54:34

标签: python pandas

我对pandas中的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?

2 个答案:

答案 0 :(得分:1)

由于A&lt; 2只有一行,<--?php echo "hello" ?--> 只有一个值:

dfnu.ix[dfnu['A'<2, 'A']

当您将其分配回dfnu时,值将与索引匹配。换句话说,因为上面显示的一行有>>> dfnu.ix[dfnu['A']<2, 'A'] A 1 Name: A, dtype: int64 作为索引,所以它的值(A)被分配给原始DataFrame中以1为索引的每一行。这也是你为其他行获得NaN的原因;由于它们没有A作为索引,因此没有为它们分配值。

答案 1 :(得分:1)

你可以这样做:

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

它会给你想要的结果