从数据框的多列组合中获取统计数据(中位数/均值/计数/90%/10%)

问题描述 投票:0回答:1

有一个像下面这样的数据框,有 3 个主要变量,第一个变量有 2 个唯一值(True/false),第二个变量有 3 个唯一值(1/2/3),第三个变量有 3 个唯一值(A/B/C) ,组合出 18 种可能的组合。

索引 变量1 变量2 变量3 价值
0 正确 1 A 12
1 错误 2 B 93
2 正确 3 C 28
3 错误 1 A 23
4 正确 2 B 94
5 错误 3 C 12
6 正确 1 A 85
7 错误 2 B 23
8 正确 3 C 2

我想循环遍历这些组合,然后为每个组合打印出类似于下面所示的数据框(总共 18 个 dfs),其中填充了统计数据,这很可能需要一个函数,但我不太确定它需要某种逻辑。

(正确/1/A)

变量1 变量2 变量3 医学 意思是 90% 分位数 10% 分位数
正确 1 A 48.5 48.5 2 77.7 19.3

我尝试了分组方式,它可以很好地组合所有内容,但不太了解 med/mean/count/90% 分位数和 10% 分位数。我还尝试查询以隔离每个组合,但无法解决迭代独特组合的最佳方法。最后对于分位数我尝试了 .quantile().

python dataframe sorting formatting data-manipulation
1个回答
0
投票

尝试:

df = df.groupby(["Var1", "Var2", "Var3"]).agg(
    Med=("Value", "median"),
    Mean=("Value", "mean"),
    Count=("Value", "count"),
    q90=("Value", lambda x: x.quantile(q=0.9)),
    q10=("Value", lambda x: x.quantile(q=0.1)),
)
df = df.reindex(
    pd.MultiIndex.from_product(
        [[True, False], [1, 2, 3], ["A", "B", "C"]], names=["Var1", "Var2", "Var3"]
    )
)

# print 18 dataframes:
for _, g in df.groupby(level=[0, 1, 2]):
    print(g)
    print("-" * 80)

打印:


...

                  Med  Mean  Count   q90   q10
Var1  Var2 Var3                               
False 3    C     12.0  12.0    1.0  12.0  12.0
--------------------------------------------------------------------------------
                 Med  Mean  Count   q90   q10
Var1 Var2 Var3                               
True 1    A     48.5  48.5    2.0  77.7  19.3
--------------------------------------------------------------------------------
                Med  Mean  Count  q90  q10
Var1 Var2 Var3                            
True 1    B     NaN   NaN    NaN  NaN  NaN

...
© www.soinside.com 2019 - 2024. All rights reserved.