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

2024-09-26 04:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据帧格式如下:

    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),而是希望获得每个列的最大值。我该怎么做?你知道吗


Tags: 数据nowebdflen格式dividendticker
2条回答

您可以使用^{}来选择所有列,而不首先使用^{}^{}

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

更具动态性的是使用^{}只选择数值列:

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

试试pandas.DataFrame.max。只要对所有列进行循环就可以了

相关问题 更多 >