Как применить формат к столбцам в фрейме данных Pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas с 90 столбцами, и я хочу применить формат к каждому столбцу. Каждый столбец имеет свой собственный формат, а функция с форматом имеет то же имя, что и имя столбца. Я хочу применить формат к каждому столбцу фрейма данных.

Например, скажем, dv, dw — это два столбца моего фрейма данных df:

 dv 
1
2
1
1
5
5

dw
2
2
1
3
2
3

def dv(dv):      
    if dv==1:
       return 1
    else:
       return 0

def dw(dw):
    if dw==2:
       return 1
    else:
       return 0
  

Я использую команду ниже :

 df['dv']=df['dv'].apply(dv)

df['dw']=df['dw'].apply(dw)
  

вывод :

 dv 
1
0
1
1
0
0


dw
1
1
0
0
1
0
  

Постановка проблемы: Я не хочу писать метод .apply для каждого столбца, поскольку у меня 90 столбцов, и я хочу сократить количество строк кода.

Ответ №1:

Вы можете использовать словарь с именами столбцов, которые вы хотите изменить, вместе с их соответствующими условиями и значениями для выполнения замен. Затем используйте функцию apply для замены значений в соответствии со словарем следующим образом:

 data = [
    [1, 2],
    [2, 2],
    [1, 1],
    [1, 3],
    [5, 2],
    [5, 3]
]

df = pd.DataFrame(data, columns = ["dv", "dw"])

dict_ = {
    "dv": {
        "condition": 1,
        "x": 1,
        "y": 0
    },
    "dw": {
        "condition": 2,
        "x": 1,
        "y": 0
    }
}

def func(x):
    column = x.name
    
    return np.where(x == dict_[column]["condition"], dict_[column]["x"], dict_[column]["y"])

df[dict_.keys()].apply(func)
  

Пример:

Ввод:

    dv  dw
0   1   2
1   2   2
2   1   1
3   1   3
4   5   2
5   5   3
  

Вывод:

    dv  dw
0   1   1
1   0   1
2   1   0
3   1   0
4   0   1
5   0   0