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。我希望得到每个组中出现的值的最小次数。我想要的结果是拜仁明辰1,科伦0。为了说明Bayern Munchen有2乘2和1乘1,所以最小是1,Koln有2乘2和0倍1,所以最小值是0。
发布于 2020-07-23 07:22:48
首先使用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值,reindex是必需的。
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))发布于 2020-07-23 07:27:56
让我们尝试使用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发布于 2020-07-23 08:38:45
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}比上面的答案稍长的版本。
https://stackoverflow.com/questions/63048863
复制相似问题