我本质上是想制作一个数据透视表,但要对其进行非常具体的排序。例如,我希望它计算 Var2=C|Var3=2 且 Var4=0 时的平均值。不确定如何将“或”或“和”合并到数据透视表函数中。下面列出了输入和输出的示例表:
输入:
进入 | 数据 | 变量2 | 变量3 | 变量4 | 变量5 |
---|---|---|---|---|---|
A | 1 | C | 3 | 0 | B |
B | 1 | A | 2 | 1 | B |
C | 2 | B | 1 | 1 | B |
D | 2 | C | 3 | 0 | A |
E | 3 | B | 2 | 0 | C |
F | 3 | B | 1 | 1 | A |
G | 4 | A | 3 | 0 | A |
H | 4 | C | 2 | 0 | C |
输出: 平均值
平均 | Var3=3 或 Var3=2 | Var2=B | Var2=A 或 Var5=B |
---|---|---|---|
Var4=0 | 2.8 | 3 | 2.5 |
Var4=1 | 1 | 2.5 | 1.5 |
中位数
医学 | Var3=3 或 Var3=2 | Var2=B | Var2=A 或 Var5=B |
---|---|---|---|
Var4=0 | 3 | 3 | 2.5 |
Var4=1 | 1 | 2.5 | 1.5 |
尝试用此方法对特定值进行排序,但它并没有真正实现我想要的效果: Python Pandas Dataframe 数据透视表列和值顺序 正在寻找更多的“或”函数来支持多个条件。
你可以尝试:
def my_func(g):
avg_1 = g.query("Var3 == 3 or Var3 == 2")["Data"].mean()
avg_2 = g.query("Var2 == 'B'")["Data"].mean()
avg_3 = g.query("Var2 == 'A' or Var5 == 'B'")["Data"].mean()
med_1 = g.query("Var3 == 3 or Var3 == 2")["Data"].median()
med_2 = g.query("Var2 == 'B'")["Data"].median()
med_3 = g.query("Var2 == 'A' or Var5 == 'B'")["Data"].median()
return pd.Series(
[avg_1, avg_2, avg_3, med_1, med_2, med_3],
index=["Avg1", "Avg2", "Avg3", "Med1", "Med2", "Med3"],
)
out = df.groupby("Var4").apply(my_func)
print(out)
打印:
Avg1 Avg2 Avg3 Med1 Med2 Med3
Var4
0 2.8 3.0 2.5 3.0 3.0 2.5
1 1.0 2.5 1.5 1.0 2.5 1.5