2

2015 FIFA 女子ワールドカップのデータをいくつかまとめました。

import pandas as pd

df = pd.DataFrame({
    'team':['Germany','USA','France','Japan','Sweden','England','Brazil','Canada','Australia','Norway','Netherlands','Spain',
       'China','New Zealand','South Korea','Switzerland','Mexico','Colombia','Thailand','Nigeria','Ecuador','Ivory Coast','Cameroon','Costa Rica'],
    'group':['B','D','F','C','D','F','E','A','D','B','A','E','A','A','E','C','F','F','B','D','C','B','C','E'],
    'fifascore':[2168,2158,2103,2066,2008,2001,1984,1969,1968,1933,1919,1867,1847,1832,1830,1813,1748,1692,1651,1633,1485,1373,1455,1589],
    'ftescore':[95.6,95.4,92.4,92.7,91.6,89.6,92.2,90.1,88.7,88.7,86.2,84.7,85.2,82.5,84.3,83.7,81.1,78.0,68.0,85.7,63.3,75.6,79.3,72.8]
    })

df.groupby(['group', 'team']).mean()

出力

ここで、次のような形式で、各groupfrom内に 6 つの可能なペアリングまたは一致を含む新しいデータフレームを生成したいと思います。df

group    team1        team2
A        Canada       China
A        Canada       Netherlands
A        Canada       New Zealand
A        China        Netherlands
A        China        New Zealand
A        Netherlands  New Zealand
B        Germany      Ivory Coast
B        Germany      Norway
...     

これを行うための簡潔でクリーンな方法は何ですか? groupそれぞれのandを介して一連のループを実行できますが、分割-適用-結合パラダイムを使用teamしてこれを行うためのよりクリーンなベクトル化された方法が必要であると感じています。pandas

編集: R の回答も歓迎します。ここで R と Pandas の方法を比較すると面白いと思います。rタグを追加しました。

コメントで要求されている R 形式のデータは次のとおりです。

team <- c('Germany','USA','France','Japan','Sweden','England','Brazil','Canada','Australia','Norway','Netherlands','Spain',
      'China','New Zealand','South Korea','Switzerland','Mexico','Colombia','Thailand','Nigeria','Ecuador','Ivory Coast','Cameroon','Costa Rica')
group <- c('B','D','F','C','D','F','E','A','D','B','A','E','A','A','E','C','F','F','B','D','C','B','C','E')
fifascore <- c(2168,2158,2103,2066,2008,2001,1984,1969,1968,1933,1919,1867,1847,1832,1830,1813,1748,1692,1651,1633,1485,1373,1455,1589)
ftescore <- c(95.6,95.4,92.4,92.7,91.6,89.6,92.2,90.1,88.7,88.7,86.2,84.7,85.2,82.5,84.3,83.7,81.1,78.0,68.0,85.7,63.3,75.6,79.3,72.8)

df <- data.frame(team, group, fifascore, ftescore)
4

2 に答える 2

3

Rをdata.table使用すると、GitHubの開発バージョンを使用して可能な解決策があります

#### To install development version
## library(devtools)
## install_github("Rdatatable/data.table", build_vignettes = FALSE)

library(data.table) ## v >= 1.9.5
setDT(df)[, transpose(combn(team, 2L, simplify = FALSE)), keyby = group]
#    group          V1          V2
# 1:     A      Canada Netherlands
# 2:     A      Canada       China
# 3:     A      Canada New Zealand
# 4:     A Netherlands       China
# 5:     A Netherlands New Zealand
# 6:     A       China New Zealand
# 7:     B     Germany      Norway
# 8:     B     Germany    Thailand
...
于 2015-06-02T21:34:35.593 に答える