如果同一行中另一列的值匹配,如何比较一列的两个值

时间:2019-07-12 19:10:32

标签: python pandas jupyter-notebook data-analysis

我有一个数据框,我想看看被杀人数更多的球队获胜的几率(0 =失败; 1 =胜利)。

  matchid   team    win     wardskilled
0   10        1     0.0        8.0
1   10        2     1.0       10.0
2   11        1     0.0        8.0
3   11        2     1.0        8.0
4   12        1     0.0        2.0
5   12        2     1.0        5.0
6   13        1     0.0        5.0
7   13        2     1.0        5.0
8   14        1     0.0        1.0
9   14        2     1.0        1.0
10  15        1     1.0        3.0
11  15        2     0.0        1.0
..  ..        ..     ..         ..
..  ..        ..     ..         ..
..  ..        ..     ..         ..

因为我是python的新手,所以我绝对不知道如何开始

我想创建类似这样的东西

       Teams with more wardskilled       Teams with less wardskilled

win              %                                   %

lose             %                                   %

我将不胜感激

2 个答案:

答案 0 :(得分:2)

另一种方法是将一个团队的wardskilled与两个团队的平均值进行比较:

means = df.groupby('matchid') .wardskilled.transform('mean')
df['more_skilled'] = np.sign(df.wardskilled.sub(means))

(df.groupby('win')
   .more_skilled
   .value_counts(normalize=True)
   .unstack('more_skilled', fill_value=0)
)

输出

more_skilled  -1.0   0.0   1.0
win                           
0.0            0.5   0.5   0.0
1.0            0.0   0.5   0.5

答案 1 :(得分:1)

rank

如果所有'matchid'都有2个团队,则可以使用它来确定该团队是较高,较低还是并列的'wardskilled'。以此分组并计算平均胜利。

s = df.groupby('matchid').wardskilled.rank().map({1: 'Less', 1.5: 'Tied', 2: 'More'})
df.groupby(s).win.mean()

#wardskilled
#More    1.0
#Less    0.0
#Tied    0.5
#Name: win, dtype: float64

拥有两列是多余的,但是如果您必须这样做:


res = df.groupby(s).win.mean().to_frame('win_per')
res['loss_per'] = 1-res['win_per']

#             win_per  loss_per
#wardskilled                   
#More             1.0       0.0
#Less             0.0       1.0
#Tied             0.5       0.5
相关问题