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

Posted

技术标签:

【中文标题】如果同一行中另一列中的值匹配,如何比较列的两个值【英文标题】:How to compare two values of a column if the values in another column in the same rows match 【发布时间】:2019-11-22 13:37:06 【问题描述】:

我有一个数据框,我想查看具有较高守卫技能的团队的获胜百分比(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             %                                   %

我将不胜感激任何形式的帮助

【问题讨论】:

【参考方案1】:

另一种方法是将一个团队的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

【讨论】:

more_skilled 行是什么意思? -1 = 更少,0 = 平局,1 = 更多? 是的,1 表示差值df.wardskilled.sub(means) 是正数,所以团队更熟练。【参考方案2】:

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

【讨论】:

感谢您的回答,您说得对,第二列是多余的。

以上是关于如果同一行中另一列中的值匹配,如何比较列的两个值的主要内容,如果未能解决你的问题,请参考以下文章

基于Scala中另一列的值映射RDD列

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列

基于sql中另一列的一列中的最大数据

我如何基于Awk中另一列中的值求和列中的值

如何在 ag-Grid Angular 设置中访问 c​​olumnDefs 中另一列的值?

如何根据Python中另一列中的日期查找最频繁的值