从数据框中的不同列获取条件值(尝试过数据透视表)

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

我本质上是想制作一个数据透视表,但要对其进行非常具体的排序。例如,我希望它计算 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 数据透视表列和值顺序 正在寻找更多的“或”函数来支持多个条件。

python dataframe sorting formatting pivot-table
1个回答
0
投票

你可以尝试:

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
© www.soinside.com 2019 - 2024. All rights reserved.