Pandas小技巧,计算数字最大的那个列

蚂蚁学Python

共 2273字,需浏览 5分钟

 ·

2021-12-02 16:44

群里一个粉丝问了一个问题:



这个问题比较有趣,如果对pandas了解深入的话,一行代码就可以搞定:




代码粘贴如下:


In [1]: import pandas as pd
In [2]: df = pd.DataFrame({})

In [5]: import numpy as np
In [6]: df = pd.DataFrame(np.random.randn(10, 5), columns=list("abcde"))
In [7]: dfOut[7]: a b c d e0 0.096833 0.586116 2.095418 0.315111 -1.6084271 0.865282 1.515651 0.640481 0.307134 0.9048202 -0.858427 0.898042 -0.053222 0.754531 0.6981373 0.396940 0.672170 0.540039 0.208133 1.1802164 -0.088589 -0.667510 0.529450 0.721198 -0.7316565 0.050982 0.054899 -1.441577 0.166684 0.7968986 -1.478824 -0.535030 0.757314 -1.641352 1.9819687 -0.158402 0.182258 1.073073 -0.064057 0.7177348 0.172994 0.559067 0.600873 0.748483 0.7704589 1.595864 -1.583323 0.254628 -1.359222 -0.314586
In [8]: df["f"] = df.apply(lambda row : sorted(dict(row).items(), key=lambda x : x[1])[-1][0],axis=1)
In [9]: dfOut[9]: a b c d e f0 0.096833 0.586116 2.095418 0.315111 -1.608427 c1 0.865282 1.515651 0.640481 0.307134 0.904820 b2 -0.858427 0.898042 -0.053222 0.754531 0.698137 b3 0.396940 0.672170 0.540039 0.208133 1.180216 e4 -0.088589 -0.667510 0.529450 0.721198 -0.731656 d5 0.050982 0.054899 -1.441577 0.166684 0.796898 e6 -1.478824 -0.535030 0.757314 -1.641352 1.981968 e7 -0.158402 0.182258 1.073073 -0.064057 0.717734 c8 0.172994 0.559067 0.600873 0.748483 0.770458 e9 1.595864 -1.583323 0.254628 -1.359222 -0.314586 a


解释一下这个代码:


1、df.apply

df.apply(function, axis=1)

这个方式,可以按行遍历df,对每一行使用function函数,这个function的参数是一个series,可以当做字典使用;


2、items

dict(row).items()

可以将row这个series变成一个字典。字典的items(),那就是[(key, value), (key, value)]这样的形式,结果形如:[ ('c', 2), ('b', 1), ('a', 3')]


3、sorted

sorted(dict(row).items(), key=lambda x : x[1])


这句,我们将字典进行了排序,使用的KEY是每个元素的第二个子元素,即原始字典的value,注意,默认是升序排列,结果形如:[('b', 1), ('c', 2), ('a', 3')]


4、sorted(xx)[-1]

sorted(dict(row).items(), key=lambda x : x[1])[-1]

这一句后面加了个[-1],因为是升序排列,所有这里取到了最大的值,例如('a', 123)


5、sorted(xx)[-1][0]

sorted(dict(row).items(), key=lambda x : x[1])[-1][0]

这时候,返回了('a', 123)的第0个元素,即列名"a"



这个代码做了比较简化的写法,大家可以思考下。


欢迎关注本公众号,持续分享Python、Pandas小案例

浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报