问题:在给定DataFrame b
的情况下,如何通过布尔掩码列标识将多个列的值替换为一个值?
什么有效,但我不想要:
b.iloc[:, 2:6] = "someConstantValue"
什么是行不通的,但是我想要:
b.iloc[:, 2:6][b["columnA"] == "someCondition"]] = "someConstantValue"
感谢您的时间!
答案 0 :(得分:3)
您可以将iloc
与布尔索引一起使用,但要小心。它适用于布尔数组,而不是布尔序列。例如:
b.iloc[(b['A'] == 'a').values, 2:6] = 'someConstantValue'
顺便说一句,链式索引在文档中为explicitly discouraged。永远不需要使用链接索引。
答案 1 :(得分:1)
您必须使用DataFrame.loc
,对于按位置的列名,请使用b.columns[2:6]
进行索引。
b = pd.DataFrame({'A':list('abaaef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4]})
print (b)
A B C D E
0 a 4 7 1 5
1 b 5 8 3 3
2 a 4 9 5 6
3 a 5 4 7 9
4 e 5 2 1 2
5 f 4 3 0 4
b.loc[b["A"] == "a", b.columns[2:6]] = 100
print (b)
A B C D E
0 a 4 100 100 100
1 b 5 8 3 3
2 a 4 100 100 100
3 a 5 100 100 100
4 e 5 2 1 2
5 f 4 3 0 4