Расчет% в сводной таблице - Python - PullRequest
0 голосов
/ 08 декабря 2018

PS; - я попытался подгонять приведенные ниже результаты, но они не показывались хорошо, и это не позволяет мне вставлять изображения, следовательно, ссылку.

Проблема - я пытаюсь рассчитать% выигрыша для командыпротив другой команды в игре в крикет, используя сводную таблицу питона.Мне нужно разделить количество побед / количество матчей.Я получил количество побед, однако я не могу получить количество совпадений в сводной таблице Python

[полная ссылка на набор данных] ----> 1

вотВывод df.head () ----> 1

id  season       city   ...           umpire1        umpire2 umpire3
1   2    2017       Pune   ...    A Nand Kishore         S Ravi     NaN
2   3    2017     Rajkot   ...       Nitin Menon      CK Nandan     NaN
3   4    2017     Indore   ...      AK Chaudhary  C Shamshuddin     NaN
4   5    2017  Bangalore   ...               NaN            NaN     NaN
5   6    2017  Hyderabad   ...        A Deshmukh       NJ Llong     NaN

Я преобразовал его в сводную таблицу с кодом ниже, показывающим количество побед от команды.Также вычисляются победители и проигравшие

matches['loser'] = np.where(matches['winner']==matches['team1'],matches['team2'],matches['team1'])
func = lambda x: x.count()
b = pd.pivot_table(matches,index=['winner'],columns=['loser'],values=['id'],aggfunc = func,fill_value='0')

b

вот вывод вывод сводной таблицы

id         ...                            
loser                       Chennai Super Kings         ...         Sunrisers Hyderabad
winner                                                  ...                            
Chennai Super Kings                           0         ...                           4
Deccan Chargers                               4         ...                           0
Delhi Daredevils                              5         ...                           4
Gujarat Lions                                 0         ...                           0
Kings XI Punjab                               7         ...                           2
Kochi Tuskers Kerala                          1         ...                           0
Kolkata Knight Riders                         6         ...                           8
Mumbai Indians                               12         ...                           5
Pune Warriors                                 2         ...                           0
Rajasthan Royals                              6         ...                           4
Rising Pune Supergiant                        0         ...                           2
Rising Pune Supergiants                       0         ...                           1
Royal Challengers Bangalore                   7         ...                           4
Sunrisers Hyderabad                           2         ...                           0

, затем я помещаю вывод в тепловую карту примерно так

from matplotlib import pyplot as plt
%matplotlib inline

# Seaborn for plotting and styling
import seaborn as sns
#b=b.values
#plt.figure()
b=b.astype(int)
f,ax = plt.subplots(figsize=(13, 10))
ax=sns.heatmap(b,annot=True,ax=ax)

1 Ответ

0 голосов
/ 08 декабря 2018

Я бы использовал pd.groupby.

РЕДАКТИРОВАТЬ - добавлен шаг для упорядочения каждой пары команд st (A, B) и (B, A)обрабатываются как одна и та же пара

# Create copy from main DataFrame
df2 = df[['team1', 'team2']]
# Order the team pairs
index_swap = (df2['team1'] > df2['team2'])
df2.loc[index_swap, 'team1'], df2.loc[index_swap, 'team2'] = (
    df2.loc[index_swap, 'team2'], df2.loc[index_swap, 'team1']
)
# Create "win" column
df2['winner'] = (df2['team1'] == df['winner']) * 1.

# Generate win percentages per pair
win_percents = df2.groupby(['team1', 'team2'])[['winner']].mean()
b = pd.pivot_table(
    win_percents,
    index=['team1'],
    columns=['team2']
)
print(b)

Используя результаты из вашего df.head() фрагмента, мой аппарат выдает следующий вывод:

team2      Delhi Hyderabad Kolkata Pune Punjab
team1                                         
Bangalore    1.0       0.0     NaN  NaN    NaN
Gujarat      NaN       NaN     0.0  NaN    NaN
Mumbai       NaN       NaN     NaN  0.0    NaN
Pune         NaN       NaN     NaN  NaN    0.0

Примечание - копирование данных DataFrameв новый кадр df2 кажется ненужным;Я хотел бы видеть решение, которое не требует этого, если кто-нибудь знает о таком решении.

...