Pandas - в Dataframe есть столбец со списками. Как я могу сгруппировать элементы в списке? - PullRequest
3 голосов
/ 07 января 2020

У меня есть фрейм данных, в котором некоторые ячейки содержат списки нескольких значений, например:

import pandas as pd

df = pd.DataFrame(
    {'category': [[x,y,z],[x],[y,z],[x,z]]
     'value': [20,30,20,10]
    }
)

df

Out[10]: 
     category  value
0    [x, y, z] 20
1    [x]       30
2    [y, z]    20
3    [x, z]    10

Я бы хотел сгруппировать данные по уникальным элементам в столбце category и захватить оба счетчика. каждого элемента и среднего значения value, в котором этот элемент присутствует.

Предполагаемый вывод должен выглядеть следующим образом:

     count  mean
x    3      20
y    2      20
z    3      16.7

Я относительно знаком с простыми групповыми функциями, и я возможность создать плоский список уникальных элементов (например, [x, y, z]). Однако я не уверен, как использовать этот плоский список для преобразования данных, как требуется выше. Помощь очень ценится!

1 Ответ

4 голосов
/ 07 января 2020

Использование (explode для pandas 0,25 +):

df.explode('category').groupby('category')['value'].agg(['count','mean'])

          count       mean
category                  
x             3  20.000000
y             2  20.000000
z             3  16.666667

Для pandas версии ниже 0.25:

(df.loc[df.index.repeat(df['category'].str.len()),['value']]
  .assign(category=np.concatenate(df['category']))
 .groupby('category')['value'].agg(['count','mean']))

          count       mean
category                  
x             3  20.000000
y             2  20.000000
z             3  16.666667
...