我对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?
答案 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
它会给你想要的结果