Панды - Соедините дублирующиеся строки - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно объединить дублированные строки.
Некоторые столбцы, которые я должен суммировать ( ДЕНЬГИ ), другие я должен поддерживать ( ВОЗРАСТ ).

DataFrame I Have:
     NAME  AGE   MONEY
0     ANA   20     2.5
1     BOB   17     2.0
2    JOHN   23     1.0
3    JOHN   23     2.0
4  NEYMAR   25  1000.0
5  NEYMAR   25  2000.0
6  NEYMAR   NaN  3000.0

DataFrame I Need:
     NAME  AGE   MONEY
0     ANA   20     2.5
1     BOB   17     2.0
2    JOHN   23     3.0
3  NEYMAR   25  6000.0

У меня более 20 000 линий, и скорость важна.
Я использую дублированную функцию плюс для индекса, строку в df.iterrows () .
Это занимает много времени.

Не могли бы вы помочь мне найти быстрый метод с использованием панд или numpy ...?

Спасибо!

Код для тестирования:

import pandas as pd

people = pd.DataFrame({
    'NAME': ['ANA', 'BOB', 'JOHN', 'JOHN', 'NEYMAR', 'NEYMAR', 'NEYMAR'] ,
    'AGE': [20, 17, 23, 23, 25, 25, 25],
    'MONEY': [2.5, 2.00, 1.0, 2.0, 1000,2000,3000],
    })

print(people)
print()

people_unique = pd.DataFrame({
    'NAME': ['ANA', 'BOB', 'JOHN', 'NEYMAR'] ,
    'AGE': [20, 17, 23, 25],
    'MONEY': [2.5, 2.00, 3.0, 6000],
    })

print(people_unique)

1 Ответ

0 голосов
/ 17 октября 2018

Используя pandas, вы можете groupby столбец NAME и взять первое AGE и сумму MONEY, используя agg.Я бы также sort_values на AGE, так что любой NaN будет в конце (это будет гарантировать, что при вызове first это будет ненулевое значение, учитывая, что по крайней мере одна строкаимеет ненулевое значение AGE для каждого NAME):

people.sort_values('AGE').groupby('NAME',as_index=False).agg({'AGE':'first','MONEY':'sum'})

     NAME   AGE   MONEY
0     ANA  20.0     2.5
1     BOB  17.0     2.0
2    JOHN  23.0     3.0
3  NEYMAR  25.0  6000.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...