【发布时间】:2021-06-06 11:38:40
【问题描述】:
我使用 mapply() 计算了 R 中数据集的其中一行中特征值的百分位数。 这是 R 代码:
library(MASS)
boston = Boston
# Suburb(s) with lowest median home value
low.medv <- boston[boston$medv == min(boston$medv),]
low.medv
# crim zn indus chas nox rm age dis rad tax ptratio black lstat medv
# 399 38.3518 0 18.1 0 0.693 5.453 100 1.4896 24 666 20.2 396.90 30.59 5
# 406 67.9208 0 18.1 0 0.693 5.683 100 1.4254 24 666 20.2 384.97 22.98 5
# quantile ranks for the values of medv suburbs
perc = data.frame(round(mapply(function(x, y) ecdf(x)(y), boston, low.medv1),3),
row.names = paste(rownames(low.medv1),'_P',sep = ""))
期望的输出
perc
# crim zn indus chas nox rm age dis rad tax ptratio black lstat medv
# 399_P 0.988 0.735 0.887 0.931 0.858 0.077 1 0.057 1 0.99 0.889 1.00 0.978 0.004
# 406_P 0.996 0.735 0.887 0.931 0.858 0.136 1 0.042 1 0.99 0.889 0.35 0.899 0.004
问题:
我正在尝试在 python 中复制它。
- 如何在 python 中复制上述内容?
- 有没有与python中的mapply()功能相同的函数?
这是用于复制的python代码:
import pandas as pd
import numpy as np
from scipy.stats import percentileofscore as ptile
from sklearn.datasets import load_boston
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['medv'] = boston.target
df.columns
# Suburb(s) with lowest median home value
low_medv = df[df.medv == min(df.medv)]
low_medv
可以用两个for循环来完成:
perc = pd.DataFrame()
for c in low_medv.columns:
for i in low_medv.index:
perc.loc[i,c] = round(ptile(df[c], low_medv.loc[i,c]),3)
# ptile calculates the percentile rank of a given value
perc
但这是最有效的方法吗?
【问题讨论】:
-
mapply是做什么的? -
代码中的
ptile函数是什么? -
@QuangHoang,ptile 计算给定值的百分位等级。 (一个值在数据系列中的百分位数。)
标签: python r pandas apply mapply