Как назначить dataframe [boolean Mask] = Series - сделать его построчным? т.е. где Mask = true брать значения из той же строки Series

У меня есть кадр данных, логическая маска (например, boolMask = df ‹= 1 ) и серия того же размера по вертикали, что и df, я хочу написать что-то вроде

df[ boolMask ] = ser

т.е. выполнить назначение элементов фрейма данных, где boolMask = TRUE, и я хочу выполнить назначение построчно, т.е. назначить элемент из той же строки Series той же строке в DataFrame

df = pd.DataFrame([[1, 2 ], [3, 4], [5 , 6]] ) 
ser = pd.Series([1, 2, 3 ])
boolMask = df <= 1

Пишу

 df[boolMask]= ser

вызывает ошибку: ValueError: необходимо указать ось=0 или 1


person Alexander Chervov    schedule 16.10.2017    source источник


Ответы (1)


Я думаю, вам нужно mask:

df = pd.DataFrame([[1, 2 ], [3, 4], [5 , 0]] ) 
print (df)
   0  1
0  1  2
1  3  4
2  5  0

ser = pd.Series([10, 20, 30 ])
boolMask = df <= 1

print (boolMask)
       0      1
0   True  False
1  False  False
2  False   True

#replace first and second value of ser - row processing
df1 = df.mask(boolMask, ser, axis=1)
print (df1)
    0   1
0  10   2
1   3   4
2   5  20

#replace first and third value of ser - column processing
df2 = df.mask(boolMask, ser, axis=0)
print (df2)
    0   1
0  10   2
1   3   4
2   5  30
person jezrael    schedule 16.10.2017
comment
Еще раз большое спасибо! Это действительно работает ! (В моем случае мне нужна ось = 0). Я приму ответ, когда это позволит мне - 5 минут... - person Alexander Chervov; 16.10.2017
comment
Не могли бы вы посмотреть на: stackoverflow.com/questions/46774161/ - person Alexander Chervov; 16.10.2017