Подтвердить что ты не робот

Pandas - можно объединить два столбца с использованием двух разных агрегатов?

Я загружаю файл csv, который имеет следующие столбцы: date, textA, textB, numberA, numberB

Я хочу группировать по столбцам: date, textA и textB - но хочу применить "sum" к numberA, но "min" to numberB.

data = pd.read_table("file.csv", sep=",", thousands=',')
grouped = data.groupby(["date", "textA", "textB"], as_index=False)

... но я не могу понять, как применить два разных агрегатных функции к двум различным столбцам? То есть sum(numberA), min(numberB)

4b9b3361

Ответ 1

Метод agg может принимать dict, в этом случае ключи указывают столбец, к которому применяется функция:

grouped.agg({'numberA':'sum', 'numberB':'min'})

Например,

import numpy as np
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
                         'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'three',
                         'two', 'two', 'one', 'three'],
                   'number A': np.arange(8),
                   'number B': np.arange(8) * 2})
grouped = df.groupby('A')

print(grouped.agg({
    'number A': 'sum',
    'number B': 'min'}))

дает

     number B  number A
A                      
bar         2         9
foo         0        19

Это также показывает, что Pandas может обрабатывать пробелы в именах столбцов. Я не уверен, что происходило с проблемой, но буквальные пространства не должны были создавать проблемы. Если вы хотите изучить это далее,

print(df.columns)

без переназначения имен столбцов, покажет нам repr имен. Возможно, в названии столбца был труднодоступный символ, который выглядел как пробел (или какой-то другой символ), но на самом деле был u'\xa0' (NO-BREAK SPACE), например.