Используя pandas "где", измените значения условия ввода для всех значений в столбце. - PullRequest
1 голос
/ 27 марта 2020

Моделирование проблемы:

Допустим, у нас есть фрейм данных

DF = pd.DataFrame({'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'c' : [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})

Мы хотим изменить 0 на 100, только если все значения в конкретном столбце равны нулю. В нашем случае это столбец c.

В конце концов у нас будет

'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
'c' : [ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100],
'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})

Я думал о DF.where(...), но изо всех сил пытался установить правильное состояние. Вероятно, есть другой способ.

Ответы [ 3 ]

3 голосов
/ 27 марта 2020

Вы можете использовать .all() и .loc, например:

DF.loc[:, DF.eq(0).all()] = 100
2 голосов
/ 27 марта 2020
import numpy as np
import pandas as pd

df = pd.DataFrame({'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'c' : [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})
for column in df.columns:
    if (df[column]==0).all():
        df[column] = 100
0 голосов
/ 27 марта 2020
Решение

mrzo элегантно, но проблема в том, что вы должны применять его ко ВСЕМ столбцам, включая C. Приведенное ниже решение должно позволить вам точно выбрать столбцы, к которым это относится:

import numpy as np
import pandas as pd

df = pd.DataFrame({'a' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'b' : [ 3, 0, 1, 0, 1, 14, 2, 0, 0, 0, 0],
                   'c' : [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                   'd' : [5, 1, 2 ,1, 1 ,22, 30, 1, 0, 0, 0]})


df['SUM'] = df['a'] + df['b'] + df['d']
df['c'] = df['SUM'].apply(lambda x: 100 if x>0 else x)
df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...