2015-09-29 3 views
2

У меня есть панд dataframe ДФ с этим настройкиCompute частоты значения в панд dataframe

col1 col2 
v1 i1 
v1 i50 
v2 i60 
v2 i1 
v2 i8 
v10 i8 
v10 i1 
v10 i2 
.. 

Я хотел бы, чтобы вычислить, сколько из элементов, входящих col1 имеет значение col2. И хранить результаты в dataframe с помощью этой установки

col1 frequency 
i1 80 
i2 195 
... ... 

Я попытался сделать это в панд,

item_frequency = pd.unique(relevant_data[relevant_data['col2'].isin(pd.unique(relevant_data['col2'].values.ravel()))]['col1'].values.ravel()) 

, который приносит ошибку

raise ValueError('Lengths must match to compare') 
ValueError: Lengths must match to compare 

PS: Я хотел бы сделать это в векторном виде.

+1

Не могли бы вы уточнить вашу задачу, с точным входом малогабаритного и результат вы хотите получить от этого входа? –

+0

, поэтому результат должен быть col1, col2, frequency? –

+1

Ваш желаемый результат не соответствует вашему утверждению, считаете ли вы чисто частоту элемента или частоту элемента за транзакцию? – EdChum

ответ

1

Это не совсем понятно, какой результат вы хотите получить, так что если вы хотите col1, col2, frequency - то вы можете использовать groupby() и size():

In [5]: df.groupby(['col1', 'col2']).size() 
Out[5]: 
col1 col2 
v1 i1  1 
     i50  1 
v10 i1  1 
     i2  1 
     i8  1 
v2 i1  1 
     i60  1 
     i8  1 

Если вы хотите просто вычислить кол col2, то value_counts() будет работать :

In [6]: df['col2'].value_counts() 
Out[6]: 
i1  3 
i8  2 
i60 1 
i2  1 
i50 1 
dtype: int64 

обновление

После того, как вы обновили свое описание, я вижу, что value_counts() может дать вам неправильный ответ, если можно получить одно значение более одного раза за каждую операцию. Но вы можете решить эту проблему с drop_duplicates():

In [9]: df.drop_duplicates()['col2'].value_counts() 
Out[9]: 
i1  3 
i8  2 
i60 1 
i2  1 
i50 1 
dtype: int64 
+0

Спасибо за помощь ur, мне нужно вычислить df [col1, где col2 = некоторое значение] .values_counts() – MedAli

+0

см. обновленный, я думаю, что это даст вам желаемый ответ –

+0

Требование нелегко обернуть один раз разум, поэтому извините, если я не буду ясно. Данные не имеют дубликатов при наборе ключей (col1, col2), поэтому нет необходимости в drop_duplicates(). – MedAli

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