微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas自定义idxmax()函数,具有特殊的相等处理

我正在处理一个充满选举数据的csv文件.我的原始样本可以表示为:

        city      party1     party2     party3
   0    city1     50         107        114
   1    city2     181        323        326
   2    city3     26         28         75
   3    city4     32         47         59
   4    ciy5      8          21         21

我使用pandas的idxmax()函数来创建一个名为“winner”的新列,如下所示:

 mydf['winner'] = mydf[['party1','party2','party3']].idxmax(axis=1)

我的目标是确定哪个政党在每个城市中处于第一位.结果如下:

        city      party1     party2     party3      winner
   0    city1     50         107        114         party3
   1    city2     181        323        326         party3
   2    city3     26         28         75          party3
   3    city4     32         47         59          party3
   4    ciy5      8          21         21          party2

获胜者的最后一个原始值是假的,因为party2和party3具有相同的分数.

是否可以在函数中包含一个异常,idxmax考虑两个值的相等性并给出“等式”?

解决方法:

您可以将DataFrame.eq用于比较子集,每行DataFrame.max值,然后使用sum,其中值更高为1,最多重复一次.那么可以使用掩码s>覆盖id00x的值到mask. 1:

a = mydf[['party1','party2','party3']]
mydf['winner'] = a.idxmax(axis=1)

s = a.eq(a.max(axis=1), axis=0).sum(axis=1)
print (s)
0    1
1    1
2    1
3    1
4    2
dtype: int64

mydf['winner'] = mydf['winner'].mask(s > 1, 'Equality')
print (mydf)
    city  party1  party2  party3    winner
0  city1      50     107     114    party3
1  city2     181     323     326    party3
2  city3      26      28      75    party3
3  city4      32      47      59    party3
4   ciy5       8      21      21  Equality

如果还需要在mul之前按列值计算多个df,则在strip之前应用join和last remove:

a = mydf[['party1','party2','party3']]
df = a.eq(a.max(axis=1), axis=0)
print (df)
  party1 party2 party3
0  False  False   True
1  False  False   True
2  False  False   True
3  False  False   True
4  False   True   True

mydf['winner'] = df.mul(df.columns.to_series())
                   .apply(','.join, axis=1)
                   .str.strip(',')
print (mydf)
    city  party1  party2  party3         winner
0  city1      50     107     114         party3
1  city2     181     323     326         party3
2  city3      26      28      75         party3
3  city4      32      47      59         party3
4   ciy5       8      21      21  party2,party3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐