Python Обработка данных - pd.apply - PullRequest
0 голосов
/ 09 июля 2020

Я столкнулся с проблемой при попытке создать новый столбец из существующих столбцов. Я обнаружил, что .apply работает, но очень медленно. К сожалению, в моей компании нет никого, кто знаком с Python. Есть ли более эффективный способ сделать следующее?

Набор данных довольно большой - 35 столбцов, 10 млн + строк.

def state_grpd(x, y, z):
    if x in ["A3",]:
        if y in ["FL", "MI", "NJ", "TX",]:
            result = y
        else:
            result = "Other"
    else:
        if z in ["FL", "MI", "NJ", "TX",]:
            result = z
        else:
            result = "Other"
    return result

df["STATE_BANDED"] =  df.apply(
    lambda x: state_grpd(x["TYPE"], x["STATE1"], x["STATE2"]), axis=1)

Ответы [ 4 ]

0 голосов
/ 09 июля 2020

Попробуйте вот это. Это может быть немного быстрее.

import pandas as pd

data = {'type': ['A3', 'A3', 'A3', 'A3', 'A1', 'A1', 'A1', 'A1', 'A2', 'A2'],
        'state1': ['FL', 'MI', 'NJ', 'TX', 'CT', 'MA', 'NH', 'FL', 'CA', 'OR'],
        'state2': ['NY', 'MS', 'NH', 'CT', 'FL', 'MI', 'NJ', 'TX', 'CA', 'OR']
        }

df = pd.DataFrame(data)
df['state_banned'] = 'Other'

mask = (df['type'] == 'A3') & (df['state1'].isin(['FL', 'MI', 'NJ', 'TX']))
df['state_banned'][mask] = df['state1'][mask]

mask = (df['type'] != 'A3') & (df['state2'].isin(['FL', 'MI', 'NJ', 'TX']))
df['state_banned'][mask] = df['state2'][mask]
0 голосов
/ 09 июля 2020

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

0 голосов
/ 09 июля 2020

Думаю, это сработает для вас.

import swifter

df["STATE_BANDED"] =  df.swifter.apply(
    lambda x: state_grpd(x["TYPE"], x["STATE1"], x["STATE2"]), axis=1)
0 голосов
/ 09 июля 2020

pandarallel может решить вашу проблему. Он заставляет функцию pandas выполнять работу в многоядерном режиме вместо одноядерного ** (распараллеливать задачу) **.

Прочтите это -

https://towardsdatascience.com/pandaral-lel-a-simple-and-efficient-tool-to-parallelize-your-pandas-operations-on-all-your-cpus-bb5ff2a409ae

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...