当前位置: 首页 > 面试题库 >

熊猫-计算所有列的z得分

罗渝
2023-03-14
问题内容

我有一个数据框,其中包含一列ID,其他所有列都是我要为其计算z分数的数值。这是它的一个小节:

ID      Age    BMI    Risk Factor
PT 6    48     19.3    4
PT 8    43     20.9    NaN
PT 2    39     18.1    3
PT 9    41     19.5    NaN

我的某些列包含不希望包含在z分数计算中的NaN值,因此我打算使用提供给此问题的解决方案:如何使用nans将zscore归一化熊猫列?

df['zscore'] = (df.a - df.a.mean())/df.a.std(ddof=0)

我有兴趣将此解决方案应用于除ID列之外的所有列,以生成新的数据框,我可以使用以下格式将其另存为Excel文件:

df2.to_excel("Z-Scores.xlsx")

所以基本上 如何计算每列的z分数(忽略NaN值)并将所有内容推送到新的数据框中?

旁白:大熊猫中有一个叫做“索引”的概念,它使我感到害怕,因为我不太了解它。如果索引是解决此问题的关键部分,请简化对索引的解释。


问题答案:

从各列构建一个列表,然后删除您不想为其计算Z分数的列:

In [66]:
cols = list(df.columns)
cols.remove('ID')
df[cols]

Out[66]:
   Age  BMI  Risk  Factor
0    6   48  19.3       4
1    8   43  20.9     NaN
2    2   39  18.1       3
3    9   41  19.5     NaN
In [68]:
# now iterate over the remaining columns and create a new zscore column
for col in cols:
    col_zscore = col + '_zscore'
    df[col_zscore] = (df[col] - df[col].mean())/df[col].std(ddof=0)
df
Out[68]:
   ID  Age  BMI  Risk  Factor  Age_zscore  BMI_zscore  Risk_zscore  \
0  PT    6   48  19.3       4   -0.093250    1.569614    -0.150946   
1  PT    8   43  20.9     NaN    0.652753    0.074744     1.459148   
2  PT    2   39  18.1       3   -1.585258   -1.121153    -1.358517   
3  PT    9   41  19.5     NaN    1.025755   -0.523205     0.050315

   Factor_zscore  
0              1  
1            NaN  
2             -1  
3            NaN


 类似资料:
  • 我如何获得所有列没有一个特定的? 示例:如果我有一个包含n列的dataframe、、...,如何获得没有的所有列?

  • 我有一个由6列组成的数据框。生成矩阵的最快方法是什么,该矩阵具有以下功能: 步骤1)col1*col1a, col2*col2a, col3*col3a, col4*col4a 步骤2)col_new=(col1*col1a)-col2*col2a)/(col1a-col2a) 使用for循环是选择之一——但是有什么方法可以更快地实现这一点。 我需要有1x3,1x4,1x5,2x3,2x4等等的列

  • 我有一个如下所示的数据帧: 如何获取除之外的所有列?

  • 问题内容: 如何获得系列中最常出现的物品? 考虑系列 返回值应该是 问题答案: 您可以使用并提取第一个值: 这不一定是低效率的。与往常一样,对您的数据进行测试以查看适合的数据。

  • 问题内容: 我有一个OHLC价格数据集,该数据集已从CSV解析为Pandas数据框,并重新采样为15分钟的柱形: 我想添加各种计算的列,从简单的列开始,例如期间范围(HL),然后是布尔值以指示我将定义的价格模式的出现-例如锤形蜡烛模式,为其定义示例: 基本问题:如何将函数映射到列,特别是在我想引用多个其他列或整行或其他内容的地方? 这篇文章处理从单个源列添加两个计算列,这是很接近的,但还不完全是。

  • 我有一个数据帧,我想按Col1 Col2 Col3分组,得到值列的0频率:df= 我如何应用groupby来实现 非常感谢。