2015-01-09 2 views
1

나는 다음과 같은 팬더 DataFrame 있습니다 파이썬 팬더 DataFrame와 "그룹 CONCAT"내부 사용 "에 의해 순서"

product_id  category  number_of_purchase 
23    cat1   18 
65    cat2   19 
66    cat1   4 
98    cat1   9 
998   cat1   1 
798   cat2   8 

그리고

나는이 새로운 DataFrame creat에 할이 DataFrame에서 :

category  url 
cat1   65&23 
cat2   65&8 

내가했을 것 MySQL의에서

(I 구입의 가장 번호의 두 항목을 검색 할 각 범주에 대한) :

select 
    category, 
    group_concat(product_id order by numbe_of_purchase desc limit2 separator '&') 
from my_table 
group by category 

그러나 나는 group_concat을 Pandas DataFrame과 함께 사용하는 방법과 group_concat 내에서 한도 및 한도를 사용하는 방법을 알지 못합니다.

답변

1

python/pandas에는 그룹 concat 함수가 없으므로 groupby를 사용해야합니다. 그것은 SQL보다 약간 길지만 여전히 상대적으로 짧습니다 (주요 부분은 3 줄입니다).

의이 dataframe을 만들어 보자 :

import pandas as pd 

data = {'product_id': [23, 65, 66, 98, 998, 798], 
     'category': ['cat1', 'cat2', 'cat1', 'cat1', 'cat1', 'cat2'], 
     'number_of_purchase': [18,19,4,9,1,8]} 

df = pd.DataFrame(data) 
print df 

결과 :

category number_of_purchase product_id 
0  cat1     18   23 
1  cat2     19   65 
2  cat1     4   66 
3  cat1     9   98 
4  cat1     1   998 
5  cat2     8   798 

첫 번째 단계 :

df = df.sort(columns='number_of_purchase', ascending=False) 
df 

결과 :

category number_of_purchase product_id 
1  cat2     19   65 
0  cat1     18   23 
3  cat1     9   98 
5  cat2     8   798 
2  cat1     4   66 
4  cat1     1   998 
우리는 판매로 dataframe를 정렬

Seconde 단계 : groupby 작업을 사용합니다. 각 카테고리에 대해 상위 2 개 카테고리의 목록을 만듭니다. 데이터는 여전히 정수입니다.

df = df.groupby('category').apply(lambda x: list(x.product_id)[:2]) 
print df 

결과 :

category 
cat1   [23, 98] 
cat2  [65, 798] 
dtype: object 

당신은 문자열로, 우리는 단순한 람다 동작을 사용하는 결과가해야하는 경우 :

df.apply(lambda x: '&'.join([str(elem) for elem in x])) 

결과 :

category 
cat1   23&98 
cat2  65&798 
dtype: object