在 Pandas 数据框中评估/排名

Evaluating / ranking in Pandas dataframe

我有 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/B & PE 获得高排名(逆排名)
  • 缺失值占 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=TrueDataFrame.rank。稍微耗时的部分是您需要将它分别应用于不同的列,因为您想要对一些升序和一些降序进行排名。

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

最后,用 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)