질문
home_team_name home_team_goal_count
0 Bayern München 2
1 Bayern München 2
2 Bayern München 1
3 Köln 2
4 Köln 2
home_team_name 변수의 데이터를 그룹화합니다.
df.groupby("home_team_name")
home_team_goal_count
의 값은 2 또는 1 만 될 수 있습니다. 최소 발생 횟수를 얻고 싶습니다.각 그룹의 값. 내가 원하는 결과는 Bayern Munchen의 경우 1이고 Koln의 경우 0입니다. 바이에른 뮌헨을 설명하기 위해 2 x 2 및 1 x 1이므로 최소값은 1입니다. Koln은 2 x 2 및 0 x 1이므로 최소값은 0입니다.
답변1
SeriesGroupBy.value_counts
, 모든 조합 1,2
에 대해 0
모양을 변경하고 추가하고 마지막으로 최소 min
을 가져옵니다. :
s = (df.groupby("home_team_name")['home_team_goal_count']
.value_counts()
.unstack(fill_value=0)
.min(axis=1))
print (s)
home_team_name
Bayern München 1
Köln 0
dtype: int64
세부 정보 :
print (df.groupby("home_team_name")['home_team_goal_count']
.value_counts()
.unstack(fill_value=0))
home_team_goal_count 1 2
home_team_name
Bayern München 1 2
Köln 0 2
가능한 경우 1
또는 입력 데이터의 2
값만 재색 인
필요합니다.
s = (df.groupby("home_team_name")['home_team_goal_count']
.value_counts()
.unstack(fill_value=0)
.reindex([1, 2], axis=1, fill_value=0)
.min(axis=1))
답변2
import pandas as pd
import numpy as np
list1=['Bayern Munchen','Bayern Munchen','Bayern Munchen','FC Koln','FC Koln']
list2=[2,2,1,2,2]
d={'Home Team Name':list1,'Home Team Goal Count':list2}
data=pd.DataFrame(d)
data['Name']= data['Home Team Name'] +" "+ data['Home Team Goal Count'].astype(str)
data['Name']
Out[39]:
0 Bayern Munchen 2
1 Bayern Munchen 2
2 Bayern Munchen 1
3 FC Koln 2
4 FC Koln 2
name,count=np.unique(data['Name'].tolist(),return_counts=True)
name=[' '.join(x.split(' ')[:-1]) for x in name]
name
Out[99]: ['Bayern Munchen', 'Bayern Munchen', 'FC Koln']
min_val=pd.DataFrame({"Name":name,"Count":count})
name=[]
min_val_count=[]
for x in min_val.Name.unique():
name.append(min_val[min_val.Name!=x].min()[0])
if min_val[min_val.Name!=x].min()[1]==2:
min_val_count.append(0)
else:
min_val_count.append(min_val[min_val.Name!=x].min()[1])
minimum_val_dict=dict(zip(name,min_val_count))
minimum_val_dict
Out[104]: {'FC Koln': 0, 'Bayern Munchen': 1}
위의 답변에 비해 약간 더 긴 버전입니다.
답변3
pd.crosstab
:
pd.crosstab(df['home_team_name'], df['home_team_goal_count'])\
.reindex([1, 2], axis=1, fill_value=0).min(1)
결과:
home_team_name
Bayern München 1
Köln 0
dtype: int64
답변4
이를 수행하는 또 다른 방법은 유한 한 상태 집합이 있기 때문에 범주 변수를 사용하는 것입니다. 그래서:
(
df
.astype({"home_team_goal_count": "category"})
.groupby("home_team_name")["home_team_goal_count"]
.apply(lambda x: x.value_counts().min())
)
가장 적게 발생한 값을 알고 싶다면 .min ()
대신 .idxmin ()
을 호출 할 수 있습니다.
출처 : https://stackoverflow.com/questions/63048863/how-to-get-minimum-number-of-occurrences-of-value-in-pandas-groupby