多条件分组和统计熊猫

时间:2019-06-01 13:26:28

标签: pandas pandas-groupby

我将尝试以最通用的方式来表达此问题。假设我有一个多列['A', 'B', 'C', 'D']的pandas数据框。

对于'A'中的每个唯一值,我需要获得以下比率:'B' == x的次数除以'B' == y的次数,即'C' == q OR p

对不起,但是我不知道如何用Python表达这一点。

样本数据:

df = pd.DataFrame({'A': ['foo', 'zar', 'zar', 'bar', 'foo', 'bar','foo', 'bar', 'tar', 'foo', 'foo'],
'B': ['one', 'two', 'four', 'three', 'one', 'two', 'three','two', 'two', 'one', 'three'],
'C': np.random.randn(11),'D': np.random.randn(11)})`

我需要类似以下内容的东西。对于i中的每个唯一值'A',我需要'B' == 'one'的次数与'B' == 'two'的次数'C' > 2的比率。

因此,输出将类似于: foo = 0.75

1 个答案:

答案 0 :(得分:0)

我将np.random.randn(11)乘以10,以便C > 2约束可以存在,因为np.random.randn(11)返回十进制值。以下代码将逐步生成您想要的内容。随时凝结。此外,C > 2约束适用于分子和分母还是仅适用于分母是不明确的。我假设只是分母。如果需要将其应用于分子,则还应将[df.C > 2]约束添加到n变量中。此外,如果发生被0除的情况,则当前df返回的比率为inf,如果发生被0除的情况,则返回nan

for i in df.A.unique():
    #print unique value
    print(f"Unique Val: {i}")

    #print numerator
    print("Numerator:")
    n = (df[df.A == i].B == 'one').sum()
    print(n)

    #print denominator
    print("Denominator:")
    d = (df[df.A == i][df.C > 2].B == 'two').sum()
    print(d)

    #print ratio
    print("Ratio:")
    r = n/d
    print(r, "\n")