Pandas小技巧,計(jì)算數(shù)字最大的那個(gè)列
群里一個(gè)粉絲問了一個(gè)問題:

這個(gè)問題比較有趣,如果對pandas了解深入的話,一行代碼就可以搞定:

代碼粘貼如下:
In [1]: import pandas as pdIn [2]: df = pd.DataFrame({})In [5]: import numpy as npIn [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.314586In [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
解釋一下這個(gè)代碼:
1、df.apply
df.apply(function, axis=1)這個(gè)方式,可以按行遍歷df,對每一行使用function函數(shù),這個(gè)function的參數(shù)是一個(gè)series,可以當(dāng)做字典使用;
2、items
dict(row).items()可以將row這個(gè)series變成一個(gè)字典。字典的items(),那就是[(key, value), (key, value)]這樣的形式,結(jié)果形如:[?('c', 2), ('b', 1), ('a', 3')]
3、sorted
sorted(dict(row).items(), key=lambda x : x[1])這句,我們將字典進(jìn)行了排序,使用的KEY是每個(gè)元素的第二個(gè)子元素,即原始字典的value,注意,默認(rèn)是升序排列,結(jié)果形如:[('b', 1), ('c', 2), ('a', 3')]
4、sorted(xx)[-1]
sorted(dict(row).items(), key=lambda x : x[1])[-1]這一句后面加了個(gè)[-1],因?yàn)槭巧蚺帕校?span style="font-family: mp-quote, -apple-system-font, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;">所有這里取到了最大的值,例如('a', 123)
5、sorted(xx)[-1][0]
sorted(dict(row).items(), key=lambda x : x[1])[-1][0]這時(shí)候,返回了('a', 123)的第0個(gè)元素,即列名"a"
這個(gè)代碼做了比較簡化的寫法,大家可以思考下。
歡迎關(guān)注本公眾號,持續(xù)分享Python、Pandas小案例
