2015-10-26 2 views
0

Я пытаюсь подсчитать Лобовое частоту различных периодов существующей dataframe для каждой сессии:счета категориальные значения и добавить полученный столбец в существующий dataframe

session  time  date  period 
    1   05:51:53 2015-05-22 night 
    1   05:52:59 2015-05-22 night 
    1   06:08:24 2015-05-22 night 
    1   06:09:06 2015-05-22 night 
    1   08:25:31 2015-05-22 morning 
    2   08:25:35 2015-05-22 morning 
    2   08:26:37 2015-05-22 morning 
    2   08:27:11 2015-05-22 morning 
    2   12:33:17 2015-05-22 noon 
    3   12:33:45 2015-05-22 noon 

для того, чтобы иметь что-то вроде:

session  time  date  period frequency 
    1   05:51:53 2015-05-22 night  4 
    1   05:52:59 2015-05-22 night 
    1   06:08:24 2015-05-22 night 
    1   06:09:06 2015-05-22 night 
    1   08:25:31 2015-05-22 morning  1 
    2   08:25:35 2015-05-22 morning  3 
    2   08:26:37 2015-05-22 morning 
    2   08:27:11 2015-05-22 morning 
    2   12:33:17 2015-05-22 noon   1 
    3   12:33:45 2015-05-22 noon   1 

Я использую этот метод

df['frequency'] = df.groupby('session', as_index=False)['period'].apply(lambda x: x.value_counts()) 

и у меня есть эта ошибка: TypeError: incompatible index of inserted column with frame index

, если я применяю .value_counts непосредственно groupby в

df['frequency'] = df.groupby('session', as_index=False)['period'].value_counts() 

У меня есть ошибка, что groupby метод не имеет атрибута value_counts

могли бы вы посоветовать мне, как II рассчитывать эти категориальные значения и в то же (я полагал, что as_index=False управляет этой проблемой, но, по-видимому, нет)

+0

Требуется ли значение частоты только для одной строки в группе? Любая проблема, если это для всех строк в группе? –

+0

Я предпочитаю одно значение за каждое значение –

+0

, наконец, этот ответ кажется лучшим на данный момент http://stackoverflow.com/questions/27192072/pandas-groupby-multiple-columns-then-attach-a-calculated-column-to- a-existing –

ответ

0

Вы можете groupby по 'session', 'period' и найти размер групп

In [19]: df['freq'] = df.groupby(['session', 'period'])['date'].transform(len) 

In [20]: df 
Out[20]: 
    session  time  date period freq 
0  1 05:51:53 2015-05-22 night 4 
1  1 05:52:59 2015-05-22 night 4 
2  1 06:08:24 2015-05-22 night 4 
3  1 06:09:06 2015-05-22 night 4 
4  1 08:25:31 2015-05-22 morning 1 
5  2 08:25:35 2015-05-22 morning 3 
6  2 08:26:37 2015-05-22 morning 3 
7  2 08:27:11 2015-05-22 morning 3 
8  2 12:33:17 2015-05-22  noon 1 
9  3 12:33:45 2015-05-22  noon 1 
+0

есть несколько строк с отсутствующими значениями, поэтому, возможно, это влияет на результат, но у меня очень странные результаты с частотой каждого периода по всему файловому кадру и не более одного сеанса –

+0

Прошу прощения, я не следую , разве это не решает то, что вы описали в вопросе? Если нет, можете ли вы добавить более подробную информацию. – Zero

+0

Нет, на самом деле, учитывая большой фрейм данных, который у меня для ex frequency = 198 вместо 4 для каждой сессии, а в некоторых строках столбца «freq» у меня есть значения даты как «2015-05-22 2015-05 -22 2015-05-22 « –

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