판다 데이터 프레임 및 카운트에서 선택한 열에 있는 값의 고유한 조합
판다 데이터 프레임에 다음과 같은 데이터가 있습니다.
df1 = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],
'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
그래서 제 데이터는 다음과 같습니다.
----------------------------
index A B
0 yes yes
1 yes no
2 yes no
3 yes no
4 no yes
5 no yes
6 yes no
7 yes yes
8 yes yes
9 no no
-----------------------------
다른 데이터 프레임으로 변환하고 싶습니다.예상 출력은 다음 python 스크립트에 표시될 수 있습니다.
output = pd.DataFrame({'A':['no','no','yes','yes'],'B':['no','yes','no','yes'],'count':[1,2,4,3]})
그래서 제 예상 출력은 다음과 같습니다.
--------------------------------------------
index A B count
--------------------------------------------
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
--------------------------------------------
실제로 다음 명령을 사용하여 모든 조합을 찾고 계산할 수 있습니다.mytable = df1.groupby(['A','B']).size()
그러나 이러한 조합은 단일 열에 있는 것으로 나타났습니다.저는 조합된 각 값을 다른 열로 분리하고 계수 결과를 위해 열을 하나 더 추가하고 싶습니다.그것이 가능합니까?당신의 제안을 받을 수 있을까요?잘 부탁드립니다.
넌 할 수 있다.groupby
콜 'A'와 'B'와 콜에size
그리고 나서.reset_index
그리고.rename
생성된 열:
In [26]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[26]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
갱신하다
두 개의 열을 그룹화함으로써, 이것은 A와 B 값이 같은 행을 그룹화합니다.size
즉, 고유 그룹 수를 반환합니다.
In[202]:
df1.groupby(['A','B']).size()
Out[202]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
이제 그룹화된 열을 복원하려면 다음을 호출합니다.reset_index
:
In[203]:
df1.groupby(['A','B']).size().reset_index()
Out[203]:
A B 0
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
이렇게 하면 인덱스가 복원되지만 크기 집계가 생성된 열로 바뀝니다.0
이름을 바꿔야 합니다.
In[204]:
df1.groupby(['A','B']).size().reset_index().rename(columns={0:'count'})
Out[204]:
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
groupby
Arg를 받아들입니다.as_index
우리가 설정할 수 있었던 것.False
따라서 그룹화된 열을 인덱스로 만들지는 않지만, 이렇게 하면series
그리고 당신은 여전히 인덱스를 복원해야 하고, 등등.:
In[205]:
df1.groupby(['A','B'], as_index=False).size()
Out[205]:
A B
no no 1
yes 2
yes no 4
yes 3
dtype: int64
Pandas 1.1.0에서는 데이터 프레임에 이 방법을 사용할 수 있습니다.
df.value_counts() # or df[['A', 'B']].value_counts()
결과:
A B
yes no 4
yes 3
no yes 2
no 1
dtype: int64
인덱스를 열로 변환하고 값 개수별로 정렬:
df.value_counts(ascending=True).reset_index(name='count')
결과:
A B count
0 no no 1
1 no yes 2
2 yes yes 3
3 yes no 4
승인된 답변과 count()와 size()의 차이와 관련된 @Bryan P의 의견에 따라 아래와 같이 count()를 클리너 코드로 선택했습니다.
df1.groupby(['A','B']).count().reset_index()
약간 관련이 있어요. 저는 독특한 조합을 찾다가 다음과 같은 방법을 생각해냈습니다.
def unique_columns(df,columns):
result = pd.Series(index = df.index)
groups = meta_data_csv.groupby(by = columns)
for name,group in groups:
is_unique = len(group) == 1
result.loc[group.index] = is_unique
assert not result.isnull().any()
return result
또한 모든 조합이 고유하다고 주장하려는 경우:
df1.set_index(['A','B']).index.is_unique
나는 이것으로 시간 테스트를 해본 적이 없지만 시도하는 것은 재미있었습니다.기본적으로 두 열을 튜플 열 하나로 변환합니다.이제 이를 데이터 프레임으로 변환하여 고유한 요소를 찾아 카운트하는 'value_counts()'를 수행합니다.zip을 다시 만지작거리면서 원하는 순서대로 열을 놓습니다.당신은 아마도 단계를 더 우아하게 만들 수 있지만 이 문제에 대해 튜플로 작업하는 것이 더 자연스러워 보입니다.
b = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
b['count'] = pd.Series(zip(*[b.A,b.B]))
df = pd.DataFrame(b['count'].value_counts().reset_index())
df['A'], df['B'] = zip(*df['index'])
df = df.drop(columns='index')[['A','B','count']]
매우 에 @EdChum 변진답을에의하우매수배치기함멋▁@▁▁@▁a▁function▁into기배치하eded.count_unique_index
고유한 방법은 데이터 프레임이 아닌 판다 시리즈에서만 작동합니다.아래 함수는 R:에서 고유 함수의 동작을 재현합니다.
unique는 중복 요소/행이 제거된 x와 같은 벡터, 데이터 프레임 또는 배열을 반환합니다.
그리고 OP의 요청에 따라 발생 횟수를 추가합니다.
def count_unique_index(df, by):
return df.groupby(by).size().reset_index().rename(columns={0:'count'})
df1 = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],
'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
count_unique_index(df1, ['A','B'])
A B count
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
언급URL : https://stackoverflow.com/questions/35268817/unique-combinations-of-values-in-selected-columns-in-pandas-data-frame-and-count
'programing' 카테고리의 다른 글
null 값을 고유 값으로 카운트 (0) | 2023.06.20 |
---|---|
열거형 값을 반복 (0) | 2023.06.20 |
typescript node.js express 경로분리된 파일 모범 사례 (0) | 2023.06.20 |
django에서 openpyxl workbook 개체를 HttpResponse로 반환합니다.가능합니까? (0) | 2023.06.20 |
static method와 abc.abstract method: 섞일까요? (0) | 2023.06.15 |