我有以这种形式的数据框:
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)
。我怎么能这样做?
答案 0 :(得分:2)
您可以使用DataFrame.iloc
选择所有列,而无需先使用DataFrame.div
和DataFrame.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。对于所有列,它应该可以正常循环