Python 我可以合并分组数据吗?
我有两个主客场栏目。所以一排是英格兰队对巴西队,下一排是巴西队对英格兰队。我如何计算巴西队与英格兰队或英格兰队与巴西队的比赛次数 基于以前的解决方案,我尝试了Python 我可以合并分组数据吗?,python,pandas,Python,Pandas,我有两个主客场栏目。所以一排是英格兰队对巴西队,下一排是巴西队对英格兰队。我如何计算巴西队与英格兰队或英格兰队与巴西队的比赛次数 基于以前的解决方案,我尝试了 results.groupby(["home_team", "away_team"]).size() results.groupby(["away_team", "home_team"]).size() 然而,这并没有给我我想要的结果 不期望的输出: 主队\客队\队 英格兰巴西1 客场球队主场球队 巴西英格兰1 我想看看: 英格兰巴西2
results.groupby(["home_team", "away_team"]).size()
results.groupby(["away_team", "home_team"]).size()
然而,这并没有给我我想要的结果
不期望的输出:
主队\客队\队英格兰巴西1 客场球队主场球队
巴西英格兰1 我想看看:
英格兰巴西2号可能是您需要的:
df = pd.DataFrame({
'home':['England', 'Brazil', 'Spain'],
'away':['Brazil', 'England', 'Germany']
})
pd.Series('-'.join(sorted(tup)) for tup in zip(df['home'], df['away'])).value_counts()
输出:
Brazil-England 2
Germany-Spain 1
dtype: int64
注:如果您不喜欢团队名称之间的-
,可以使用:
pd.Series(' '.join(sorted(tup)) for tup in zip(df['home'], df['away'])).value_counts()
您可以按排序值,创建DataFrame
并使用原始解决方案:
df1 = (pd.DataFrame(np.sort(df[['home','away']], axis=1), columns=['home','away'])
.groupby(["home", "away"])
.size())
选项1 您可以使用
numpy.sort
对数据帧的值进行排序
然而,随着排序的进行,可能最好创建数据帧的副本
dfTeams = pd.DataFrame(data=df.values.copy(), columns=['team1','team2'])
dfTeams.values.sort()
(我更改了列名,因为通过排序,您正在更改它们的含义)
完成此操作后,您可以使用groupby
results.groupby(['team1', 'team2']).size()
选项2
由于您的问题有一个更一般的标题,比如如何计算数据帧上多个列中的值的组合,而与它们的顺序无关,因此您可以使用一个
集合对象是不同的散列对象的无序集合
更准确地说,创建冻结集的系列,然后计算值
pd.Series(map(lambda home, away: frozenset({home, away}),
df['home'],
df['away'])).value_counts()
注意:我在@Harv Ipan的回答中使用了数据框。请发布您想要看到的内容以及您正在看到的内容。不希望看到的输出:主队\客队\英格兰巴西队1客队\主队\巴西队英格兰队1我想看:英格兰巴西队2@jiggy357,你可以核对我的答案。另外,用格式将您的预期输出发回问题,以便每个人都能看到。这正是我想要的。谢谢你的邀请help@jiggy357,很高兴我能帮忙。