Обновите несколько столбцов с помощью функции Pandas Apply - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь обновить несколько столбцов с помощью функции применения панд данных. Я успешно могу сделать это для одного столбца.

Существующий код

def funcgetsh(input):
...     hash_object = hashlib.sha1(input)
...     return hash_object.hexdigest()

df["col_1"]=df["col_1"].apply(funcgetsh)

Хотел бы узнать, есть ли способ сделать то же самое для любого количества столбцов, например

df["col_1","col_2","col_3"]=df["col_1","col_2","col_3"].apply(funcgetsh)

1 Ответ

0 голосов
/ 18 апреля 2019

Попробуйте изменить df["col_1","col_2","col_3"]=df["col_1","col_2","col_3"].apply(funcgetsh) на df[["col_1","col_2","col_3"]]=df[["col_1","col_2","col_3"]].apply(funcgetsh).См. Пример ниже.

import pandas as pd

data1 = {"col_1": [1, 2, 3],
        "col_2": [4, 5, 6],
        'col_3': [7, 8, 9]}

df1 =pd.DataFrame(data1)

print(df1)

   col_1  col_2  col_3
0      1      4      7
1      2      5      8
2      3      6      9

def times10(x):
    return 10*x

df1[['col_1', 'col_2']] = df1[['col_1', 'col_2']].apply(times10)

print(df1)

   col_1  col_2  col_3
0     10     40      7
1     20     50      8
2     30     60      9

Этот обходной путь должен работать для вас, замените свою функцию примером.

import pandas as pd

data1 = {"col_1": [1, 2, 3],
        "col_2": [4, 5, 6],
        'col_3': [7, 8, 9]}

df1 =pd.DataFrame(data1)

# combine columns you want to apply the function to
working_data = df1[['col_1', 'col_2']]

# drop the original values from the columns being altered
# keep unaltered columns
df2 = df1.drop(['col_1', 'col_2'], axis = 1)

# your function here
def times10(x):
    return 10*x

# apply function to the columns/values desired
working_data = working_data.apply(times10)

# merge post function columns/values with the original unaltered columns/values
final_df = pd.merge(working_data, df2, how = 'inner', left_index = True, right_index = True)

print(final_df)

   col_1  col_2  col_3
0     10     40      7
1     20     50      8
2     30     60      9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...