Python - 创建 2 个新列,其中包含多个行值的第 25 个和第 75 个百分位

标签 python pandas dataframe statistics percentile

这是我的 df 的样子(有更多行和更多列):

<表类=“s-表”> <标题> 索引 WTG1 WTG2 WTG3 <正文> 1.5 61.25 -7.57 7.18 2 19.69 25.95 28.67 2.5 59.51 81.22 78.22 3 131.81 154.07 142.92

我的目标是获得:

<表类=“s-表”> <标题> 索引 WTG1 WTG2 WTG3 25% 75% 平均值 <正文> 1.5 61.25 -7.57 7.18 (61.2、-7.57、7.18 的第 25 个百分位) (61.2、-7.57、7.18 的第 75 个百分位) (61.2、-7.57、7.18 的平均值) 2 19.6 25.95 28.67 (19.69、25.95、28.67 的第 25 个百分位) (19.69、25.95、28.67 的第 75 个百分位) (19.69、25.95、28.67 的平均值) 2.5 59.51 81.22 78.22 (59.51、81.22、78.22 的第 25 个百分位) (59.51、81.22、78.22 的第 75 个百分位) (59.51、81.22、78.22 的平均值) 3 131.81 154.07 142.92 (131.81、154.07、142.92 的第 25 个百分位) (131.81、154.07、142.92 的第 75 个百分位) (131.81、154.07、142.92 的平均值)

我已经找了很长时间了,我能做到最好:

df['mean'] = df[['WTG1','WTG2','WTG3'].mean(axis=1)
df['25th Percentile'] = np.nanpercentile(df[['WTG1','WTG2','WTG3']],25)
df['75th Percentile'] = np.nanpercentile(df[['WTG1','WTG2','WTG3']],75)

平均值似乎有效,但尚未检查值。

但百分位数是这里真正的问题...似乎 nanpercentile 函数仅适用于列。对于两个百分位数列,它在每一行上返回相同的值(我猜这是整个 df 的相应第 25 个和第 75 个百分位数值),这不是我要做的事情。

我能够找到一些替代方案,但无法使它们适应我的需要,例如:

perc75 = np.vectorize(lambda x: np.percentile(x, 75))
df['75th_percentile'] = perc75(df['WTG01'].values)

它有效,但仅适用于一列。

df['25th_percentile'] = df['WTG1','WTG2','WTG3'].apply(lambda x: np.percentile(x, 25))

这不起作用...

最佳答案

我认为你可以转置 DataFrame 并应用 df.describe()

import pandas as pd
df = pd.DataFrame({'WTG1': [61.25, 19.69, 59.51, 131.81],
                   'WTG2': [-7.57, 25.95, 81.22, 154.07],
                   'WTG3': [7.18, 28.67, 78.22, 142.92]
                   })
print(df)
print(df.T)

输出

     WTG1    WTG2    WTG3
0   61.25   -7.57    7.18
1   19.69   25.95   28.67
2   59.51   81.22   78.22
3  131.81  154.07  142.92

          0      1      2       3
WTG1  61.25  19.69  59.51  131.81
WTG2  -7.57  25.95  81.22  154.07
WTG3   7.18  28.67  78.22  142.92

在这个问题中,您试图获取每一行的统计信息。转置 DataFrame 后,您可以查看列,这样您就可以方便地获得每列的摘要统计信息

print(df.T.describe())

输出

               0          1          2           3
count   3.000000   3.000000   3.000000    3.000000
mean   20.286667  24.770000  72.983333  142.933333
std    36.233778   4.604824  11.764269   11.130006
min    -7.570000  19.690000  59.510000  131.810000
25%    -0.195000  22.820000  68.865000  137.365000
50%     7.180000  25.950000  78.220000  142.920000
75%    34.215000  27.310000  79.720000  148.495000
max    61.250000  28.670000  81.220000  154.070000

关于Python - 创建 2 个新列,其中包含多个行值的第 25 个和第 75 个百分位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72319379/

相关文章:

python - 将不同维度的图像存储在 numpy 数组中

Python 读取 Tick Data Pandas

python - 无法使用 docker-compose 安装 Python 包

python - 基于 boolean pandas df 的高亮元素

python - 使用 pandas groupby 或其他函数对多个数据帧进行子集化的简单方法?

python - Numpy loadtxt 跳过第一列

python - Pandas,如果名称超过 20 个字符,则删除重复的名称行

python - Dash 交互式图表不会从 Pandas Dataframe 更新

python - pandas 数据框 - 索引列标题较低。为什么?

python - 如何将具有值作为字典的列拆分为新列(具有 NaN 值)