#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