pandas группа, где и еще - PullRequest
       30

pandas группа, где и еще

0 голосов
/ 01 марта 2020

У меня есть такой фрейм данных:

    col1 col2
0    a   100
1    a   200
2    a   150
3    b   1000
4    c   400
5    c   200

, что я хочу сделать, это сгруппировать по col1 и посчитать количество вхождений, а если count равно или больше 2, то вычислить среднее значение col2 для эти строки, и если не применить другую функцию. Выходные данные должны быть:

    col1 mean
0    a   150
1    b   whatever aggregator function returns 
2    c   300

Я следовал здесь @ansev solution pandas счетчик групп, а затем условное среднее однако я не хочу заменять их NaN и на самом деле хочу чтобы заменить его значением, которое возвращается из другой функции, подобной этой:

def aggregator(col1, col2):
    return col1+col2

Имейте в виду, что фактическая функция агрегатора более сложна и зависит от других таблиц, и это просто для упрощения вопроса.

1 Ответ

0 голосов
/ 01 марта 2020

Я не уверен, что это то, что вам нужно, но вы можете разрешить до apply:

def aggregator(x):
    if len(x)==1:
        return pd.Series( (x['col1'] + x['col2'].astype(str)).values)
    else: return pd.Series(x['col2'].mean())

df.groupby('col1').apply(aggregator)

Вывод:

          0
col1       
a       150
b     b1000
c       300
...