创建函数以使用列pandas中的最大值进行计算

时间:2017-05-18 13:25:29

标签: python pandas

我有以这种形式的数据框:

    Ticker  P/E     P/S     P/B     P/FCF   Dividend
No.                     
1   YELP    20.0    28.0    20.0    7.0     3.0
2   JRJC    19.0    6.0      1.0    21.0    3.0
3   BCOR    18.0    20.0    14.0    21.0    3.0
4   TTGT    17.0    24.0    15.0    9.0     2.0
5   WEB     16.0    16.0    25.0    2.0     1.0
6   YNDX    15.0    38.0    34.0    18.0    3.0
7   GRUB    14.0    39.0    26.0    16.0    3.0

我已经在df上应用了函数来计算上述df中数字的分数

def calcrank(x):
    return 100*(1-(x-1)/len(df))

但是,我希望获得每个列的最大值,而不是len(df)。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您可以使用DataFrame.iloc选择所有列,而无需先使用DataFrame.divDataFrame.max

def calcrank(x):
    x.iloc[:, 1:] =  100*(1-(x.iloc[:, 1:] - 1).div(df.iloc[:, 1:].max()))
    return x

print (calcrank(df))
    Ticker   P/E        P/S         P/B      P/FCF    Dividend
No.                                                           
1     YELP   5.0  30.769231   44.117647  71.428571   33.333333
2     JRJC  10.0  87.179487  100.000000   4.761905   33.333333
3     BCOR  15.0  51.282051   61.764706   4.761905   33.333333
4     TTGT  20.0  41.025641   58.823529  61.904762   66.666667
5      WEB  25.0  61.538462   29.411765  95.238095  100.000000
6     YNDX  30.0   5.128205    2.941176  19.047619   33.333333
7     GRUB  35.0   2.564103   26.470588  28.571429   33.333333

更多动态是使用select_dtypes仅用于选择数字列:

def calcrank(x):
    cols = df.select_dtypes([float,int])
    x[cols.columns] =  100*(1-(cols - 1).div(cols.max()))
    return x

print (calcrank(df))
    Ticker   P/E        P/S         P/B      P/FCF    Dividend
No.                                                           
1     YELP   5.0  30.769231   44.117647  71.428571   33.333333
2     JRJC  10.0  87.179487  100.000000   4.761905   33.333333
3     BCOR  15.0  51.282051   61.764706   4.761905   33.333333
4     TTGT  20.0  41.025641   58.823529  61.904762   66.666667
5      WEB  25.0  61.538462   29.411765  95.238095  100.000000
6     YNDX  30.0   5.128205    2.941176  19.047619   33.333333
7     GRUB  35.0   2.564103   26.470588  28.571429   33.333333

答案 1 :(得分:0)

尝试pandas.DataFrame.max。对于所有列,它应该可以正常循环