熊猫:使用布尔型掩码替换多列的值

时间:2018-08-22 12:05:39

标签: python pandas dataframe indexing

问题:在给定DataFrame b的情况下,如何通过布尔掩码列标识将多个列的值替换为一个值?

什么有效,但我不想要:

b.iloc[:, 2:6] = "someConstantValue"

什么是行不通的,但是我想要:

b.iloc[:, 2:6][b["columnA"] == "someCondition"]] = "someConstantValue"

感谢您的时间!

2 个答案:

答案 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