замена значений в фрейме данных pandas на основе нескольких условий - PullRequest
1 голос
/ 09 марта 2019

У меня довольно простой вопрос, основанный на этом примере кода:

x1 = 10*np.random.randn(10,3)
df1 = pd.DataFrame(x1)

Я ищу один DataFrame, полученный из df1, где положительные значения заменяются на «вверх», отрицательные значения заменяются на «вниз ", и значения 0, если они есть, заменяются на" ноль ".Я пытался использовать методы .where () и .mask (), но не смог получить желаемый результат

Я видел другие записи, которые фильтруют по нескольким условиям одновременно, но они не показывают, как заменитьзначения в соответствии с различными условиями

Ответы [ 2 ]

4 голосов
/ 09 марта 2019
df1.apply(np.sign).replace({-1: 'down', 1: 'up', 0: 'zero'})

Вывод:

      0     1     2
0  down    up    up
1    up  down  down
2    up  down  down
3  down  down    up
4  down  down    up
5  down    up    up
6  down    up  down
7    up  down  down
8    up    up  down
9  down    up    up

PS Получение точного нуля с randn маловероятно, конечно

1 голос
/ 09 марта 2019

В общем, вы можете использовать np.select на values и пересобрать DataFrame

import pandas as pd
import numpy as np

df1 = pd.DataFrame(10*np.random.randn(10, 3))
df1.iloc[0, 0] = 0 # So we can check the == 0 condition 

conds = [df1.values < 0 , df1.values > 0]
choices = ['down', 'up']

pd.DataFrame(np.select(conds, choices, default='zero'),
             index=df1.index,
             columns=df1.columns)

Выход:

      0     1     2
0  zero  down    up
1    up  down    up
2    up    up    up
3  down  down  down
4    up    up    up
5    up    up    up
6    up    up  down
7    up    up  down
8  down    up  down
9    up    up  down
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...