2016-05-10 1 views
1

Допустим, у меня есть данные, как показано ниже в панде dataframe:Панда Нахождение Multiple иерархия Среды

enter image description here

Я хотел бы найти описательные статистики (среднее, медиану, стандартное Dev) из:

  1. уникальных пользователей в когорте
  2. комментариев на одного пользователя в группе
  3. комментариев в когорте

Так что для выхода, я ожидал увидеть:

  1. уникальных пользователей в когорте -> [{а: 3}, {Ь: 2}, ...], а затем найти описательную статистику для серии
  2. комментариев для каждого когорты -> [{(a, alex): 2}, {(b, alex): 0}, {(a, beth): 1}, {(b, beth) : 3} ...]
  3. комментариев в когорту -> [{а: 5}, {Ь: 6} ...]

Я использую панда, и я абсолютно застрял на как сделать что-то так просто. Я думал об использовании .groupby(), но это не дало ясного решения. Я мог бы сделать это без Панд, но я думал, что это были вопросы, на которые был сделан набор данных Pandas !?

Спасибо!

+0

Некоторые примеры вывода было бы полезно. – piRSquared

+0

Добавлено то, что я хотел бы увидеть. Благодаря! – Alex

+0

Пожалуйста, не помещайте вопросы python/pands с помощью [R], если нет веской причины. –

ответ

2

Решение

Вы можете использовать

df.groupby(['Cohort', 'User']).describe() 

или

df.groupby(['Cohort']).describe() 

Per нужного выхода

df.groupby(['Cohort'])['User'].apply(lambda x: x.describe().ix['unique']) 

и

df.groupby(['Cohort', 'User'])['Comment'].apply(lambda x: x.describe().ix['unique']) 

и

df.groupby(['Cohort'])['Comment'].apply(lambda x: x.describe().ix['unique']) 
+0

Это дает мне описательную статистику для числовых значений, сгруппированных по '['когорта', 'user']', но меня интересуют сами подсчеты группировки. Спасибо за помощь! – Alex

+0

Я думаю, что это так! Я просто добавил '.describe()' до конца и получил сводную статистику, в которой я нуждался. Благодаря! – Alex

2
>>> df.groupby('Cohort').User.apply(lambda group: group.unique()) 
Cohort 
a [alex, beth, craig] 
b   [beth, craig] 
Name: User, dtype: object 

>>> df.groupby('Cohort').User.apply(lambda group: group.nunique()) 
Out[40]: 
Cohort 
a 3 
b 2 
Name: User, dtype: int64 

>>> df.groupby(['Cohort', 'User']).Comment.count() 
Out[43]: 
Cohort User 
a  alex  2 
     beth  1 
     craig 2 
b  beth  3 
     craig 3 
Name: Comment, dtype: int64 

df.groupby(['Cohort']).Comment.count() 
Out[44]: 
Cohort 
a 5 
b 6 
Name: Comment, dtype: int64 
+0

Спасибо за этот код. Это очень полезно для лучшего понимания того, что происходит. – Alex

Смежные вопросы