基于有效值的组合聚合

EGM*_*686 7 python dataframe pandas

我有一个具有以下结构的 df:

id  a1_l1   a2_l1   a3_l1   a1_l2   a2_l2   a3_l2
1   1       5       3       1       2       3
2   1       5       3       1       2       3
3   2       5       3       5       5       3
4   5       5       3       5       5       3
5   5       5       2           
6   5       5       2           
7   5       5       2           
8   2       5       2           
9   3       5       1           
10  3       5       1   
Run Code Online (Sandbox Code Playgroud)

我想总结在一个表格中,这样我就可以得到:

    l1  l2
a1  0.4 0.5
a2  1   0.5
a3  0   0
Run Code Online (Sandbox Code Playgroud)

我正在做的是计算 5 出现的次数除以有效响应的数量,例如:

a1, l1 等于 0.4,因为我有 4 个 5 的值除以 10。a2, l1 等于 0.5,因为我有 2 个 5 的值除以每列 4 个有效响应。

谢谢!

moz*_*way 4

您可以重塑一个具有 MultiIndex 的数据帧,然后将(sum真值等于 5)除以 not na。最后,unstack

df2 = df.set_index('id')
df2.columns = df2.columns.str.split('_', expand = True)
df2 = (df2.eq(5).sum()/df2.notna().sum()).unstack()
Run Code Online (Sandbox Code Playgroud)

输出:

     l1   l2
a1  0.4  0.5
a2  1.0  0.5
a3  0.0  0.0
Run Code Online (Sandbox Code Playgroud)