2016-07-12 2 views
1

행이 특정 사용자가 수행 한 트랜잭션을 나타내는 데이터 프레임이 있습니다. 두 개 이상의 행이 동일한 user_id를 가질 수 있습니다. 성 열 이름을 감안할 때 실행 USER_ID :다른 컬럼의 주어진 컬럼의 카테고리의 고유 값 계산하기

df.gender.value_counts() 

이 주파수를 반환합니다하지만 그들은 아마도 주어진 사용자에 한 번 이상 계산 될 수 있기 때문에 그들은 가짜입니다. 그래서 예를 들어 50 명의 남성이 실제로는 훨씬 적다는 것을 알 수 있습니다.

value_counts()을 user_id 당 한 번만 계산할 수있는 방법이 있습니까?

+0

가능한 중복 [팬더와 함께 고유 한 값을 카운트] (http://stackoverflow.com/questions/38309729/count-unique-values-with-pandas) – ayhan

+0

그 이유를 궁금해 나중에 고유 한'user_id'를 선택하지 않고'gender'로 그룹화합니다. 바라기를, 당신의 사용자는 그들의 성을 너무 수시로 바꾸지 않는다. – jbndlr

답변

2

당신은 당신의 dataframe에 팬더의 groupby를 사용하려면 :

users = {'A': 'male', 'B': 'female', 'C': 'female'} 
ul = [{'id': k, 'gender': users[k]} for _ in range(50) for k in random.choice(users.keys())] 
df = pd.DataFrame(ul) 

print(df.groupby('gender')['id'].nunique()) 

이 수익률 (재산의 임의 선택에 따라,하지만 기회는 세 가지 각 키가 적어도 한 번 선택"매우 높음"입니다 50 개 샘플) :

gender 
female 2 
male  1 
Name: id, dtype: int64 
+0

이것은 잘된다. –

0

내가 첫 번째 게시물에 동의하지만, 단지 확인하기 위해 GROUPBY 간단 :

df.groupby('user_id').first().count() will give you counts of each variable 

또는 대안 :의

pd.value_counts(df.groupby('user_id').first().reset_index().gender) 
관련 문제