Я пытаюсь выполнить несколько операций над большим фреймворком данных (~ 3 миллиона строк).
Используя небольшой тестовый набор, представляющий мои данные, я придумал решение.
Однако сценарий работает очень медленно при использовании большого набора данных в качестве входных данных.
Работа в группах Pandas
Вот основной цикл приложения:
def run():
df = pd.DataFrame(columns=['CARD_NO','CUSTOMER_ID','MODIFIED_DATE','STATUS','LOYALTY_CARD_ENROLLED'])
foo = input.groupby('CARD_NO', as_index=False, sort=False)
for name, group in foo:
if len(group) == 1:
df = df.append(group)
else:
dates = group['MODIFIED_DATE'].values
if all_same(dates):
df = df.append(group[group.STATUS == '1'])
else:
df = df.append(group[group.MODIFIED_DATE == most_recent(dates)])
path = ''
df.to_csv(path, sep=',', index=False)
Логика следующим образом:
Для каждого CARD_NO
- если есть только один CARD_NO, добавьте строку в новой dataframe
- если есть 1 из того же CARD_NO, проверьте MODIFIED_DATE,
- если MODIFIED_DATE отличаются, возьмите строку с самой последней датой
- если все MODIFIED_DATES являются eq UAL, принимать в зависимости от того строка имеет STATUS = 1
Замедление происходит на каждой итерации вокруг,
input.groupby('CARD_NO', as_index=False, sort=False)
Я в настоящее время пытается распараллелить цикл путем разделения групп, возвращаемые выше заявление, но Я не уверен, что это правильный подход ...
Я пропустил основные функции Панд?
Есть ли лучший, более Pandas-esque способ решения этой проблемы?
Любая помощь с благодарностью.
Спасибо.
Где вы читаете данные? Это файл csv? – nitin
Да. Это около 145 мб. – Zihs
постоянно добавление неэффективно; добавьте сгенерированный фрейм для каждой группы в список; concat в конце – Jeff