这是我的 df 的样子(有更多行和更多列):
我的目标是获得:
我已经找了很长时间了,我能做到最好:
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/