我有一个与下面的示例类似的数据集:| id | old_a | old_b | new_a | new_b ||----|-------|-------|-------|-------|| 6 | 3 | 0 | 0 | 0 || 6 | 9 | 0 | 2 | 0 || 13 | 3 | 0 | 0 | 0 || 13 | 37 | 0 | 0 | 1 || 13 | 30 | 0 | 0 | 6 || 13 | 12 | 2 | 0 | 0 || 6 | 7 | 0 | 2 | 0 || 6 | 8 | 0 | 0 | 0 || 6 | 19 | 0 | 3 | 0 || 6 | 54 | 0 | 0 | 0 || 87 | 6 | 0 | 2 | 0 || 87 | 11 | 1 | 1 | 0 || 87 | 25 | 0 | 1 | 0 || 87 | 10 | 0 | 0 | 0 || 9 | 8 | 1 | 0 | 0 || 9 | 19 | 0 | 2 | 0 || 9 | 1 | 0 | 0 | 0 || 9 | 34 | 0 | 7 | 0 |我为上表提供了这个示例数据集:data=[[6,3,0,0,0],[6,9,0,2,0],[13,3,0,0,0],[13,37,0,0,1],[13,30,0,0,6],[13,12,2,0,0],[6,7,0,2,0], [6,8,0,0,0],[6,19,0,3,0],[6,54,0,0,0],[87,6,0,2,0],[87,11,1,1,0],[87,25,0,1,0],[87,10,0,0,0], [9,8,1,0,0],[9,19,0,2,0],[9,1,0,0,0],[9,34,0,7,0]]data= pd.DataFrame(data,columns=['id','old_a','old_b','new_a','new_b'])我想查看每个 id 的“new_a”和“new_b”列,即使每个 id 的这两列中存在单个值,我也想将其计为 1,而不管任何值出现的次数并分配如果不存在任何值,则为 0。例如,如果我查看 id '9',new_a 中有两个不同的值,但我想将其计为 1。同样,对于 id '13',new_a 中没有值,所以我想指定为 0。我的最终输出应该是这样的:| id | new_a | new_b ||----|-------|-------|| 6 | 1 | 0 || 9 | 1 | 0 || 13 | 0 | 1 || 87 | 1 | 0 |我最终想计算使用 new_a 和 new_b 的客户端百分比。所以从上表来看,75%的客户端使用new_a,25%的客户端使用new_b。我是 python 的初学者,不知道如何继续。
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
使用GroupBy.any
, 因为0
像 s 一样进行处理False
并将输出布尔值转换为整数:
df = data.groupby('id')[['new_a','new_b']].any().astype(int).reset_index()
print (df)
id new_a new_b
0 6 1 0
1 9 1 0
2 13 0 1
3 87 1 0
mean对于上述输出的使用百分比:
s = df[['new_a','new_b']].mean().mul(100)
print (s)
new_a 75.0
new_b 25.0
dtype: float64
添加回答
举报
0/150
提交
取消