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,很高兴我能帮忙。