我将尝试以最通用的方式来表达此问题。假设我有一个多列['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
答案 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")