Pandas数据框架中的评估/排名

2024-09-30 20:23:17 发布

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

我有Pandas DataFrame,在那里我导入了包含几百行的Excel电子表格。每一行是一个公司名称,每一列都有一些基本数据,如比率等。在

Symbol  Name  P/BV  PE     NCB

A       AGT   4.382 42.59  0.0145

AAAP    AdvAc 6.91  NaN    -0.0003

AAME    AtlAm 0.6205 29.55 0.0089

AAN     Aaron 2.093 23.89  0.0213

有更多的列和更多的行,但我认为这足以说明数据。有时比率没有值,所以自动填充了NaN值。在

我想做的是评估每个公司:

  • 每一列(例如p/BV)都是一个包含从最低到最高的值的宇宙-创建了一个100%的范围。每个公司将在新列中进行评估:我想为每个公司分配1到100的百分位排名。如果公司的市盈率是全球最低的1%,那么它的排名是100(因为这里最低的是最好的)。最高比率获得排名1。

  • 如果缺少一个值-存在NaN-分配秩50

  • 我需要像这样计算每个列,所以我需要为每个比率列创建新列,并用排名值填充它。

  • 有些比率在它的值最高时是最好的,比如NCB列。

稍后,我将在最后一列中添加每个公司的所有排名值,我可以对其进行管理。我就是不能让这个排名生效。有人能帮我吗?在

提前感谢:-)


Tags: 数据name名称dataframepandas公司nansymbol
1条回答
网友
1楼 · 发布于 2024-09-30 20:23:17

下面是一个使用类似数据的示例。在本例中:

  • 低市盈率和市盈率获得高排名(反向排名)
  • 缺失值收到50%(第50百分位)
  • 高MCV获得高等级(直接等级)

示例数据帧:

  Symbol     P_BV     PE      NCB
0      A -0.59587  42.50 -1.42680
1      B  0.09875    NaN -0.82033
2      C  0.10987  29.55  0.73841
3      D  3.03278  23.89 -0.31283
4      E  0.70129  10.00 -1.00830

现在将^{}与参数pct=True一起使用。比较耗时的部分是,您需要将它分别应用于不同的列,因为您需要对一些升序和一些降序进行排序。在

^{pr2}$

最后,用50填充NaN值:

new_df.fillna(value=50., inplace=True)

结果如下:

  Symbol   P_BV     PE    NCB
0      A  100.0   25.0   20.0
1      B   80.0   50.0   60.0
2      C   60.0   50.0  100.0
3      D   20.0   75.0   80.0
4      E   40.0  100.0   40.0

您需要的组合代码:

new_df = df.copy()
new_df.loc[:, ['P_BV', 'PE']] = (df[['P_BV', 'PE']]
                                     .rank(pct=True, ascending=False) * 100)
new_df.loc[:, 'NCB'] = df['NCB'].rank(pct=True) * 100  # ascending=True
new_df.fillna(value=50., inplace=True)

相关问题 更多 >