首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在熊猫群中获得最小的价值发生次数

如何在熊猫群中获得最小的价值发生次数
EN

Stack Overflow用户
提问于 2020-07-23 07:17:39
回答 4查看 1.3K关注 0票数 3
代码语言:javascript
复制
          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上的数据分组。

代码语言:javascript
复制
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。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-07-23 07:22:48

首先使用SeriesGroupBy.value_counts计数值,然后对所有组合1,2进行整形和添加0,最后通过min获得最小值。

代码语言:javascript
复制
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

详细信息

代码语言:javascript
复制
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

如果可能,只需要输入数据中的12值,reindex是必需的。

代码语言:javascript
复制
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))
票数 3
EN

Stack Overflow用户

发布于 2020-07-23 07:27:56

让我们尝试使用pd.crosstab

代码语言:javascript
复制
pd.crosstab(df['home_team_name'], df['home_team_goal_count'])\
    .reindex([1, 2], axis=1, fill_value=0).min(1)

结果:

代码语言:javascript
复制
home_team_name
Bayern München    1
Köln              0
dtype: int64
票数 3
EN

Stack Overflow用户

发布于 2020-07-23 08:38:45

代码语言:javascript
复制
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}

比上面的答案稍长的版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63048863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档