有一个像下面这样的数据框,有 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().
尝试:
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
...