下面是我拥有的一个数据帧的小样本,我想在其底部添加一个计算行:
sch q1 q2 q3
acc Yes Yes No
acc Yes No No
acc Yes No No
acc Yes Yes Yes
我想在底部添加一行,它会为每列提供“是”值的百分比,因此它看起来如下所示。
sch q1 q2 q3
acc Yes Yes No
acc Yes No No
acc Yes No No
acc Yes Yes Yes
acc 1.00 0.5 0.25
非常感谢任何帮助。
答案 0 :(得分:2)
假设以下方法:
In [11]: df.loc[len(df)] = ['acc'] + df.filter(regex='^q\d+') \
.eq('Yes').mean().values.tolist()
In [12]: df
Out[12]:
sch q1 q2 q3
0 acc Yes Yes No
1 acc Yes No No
2 acc Yes No No
3 acc Yes Yes Yes
4 acc 1 0.5 0.25
答案 1 :(得分:2)
我看到你的lambda并提出一个纯粹的熊猫解决方案:
df.append(df.eq('Yes').mean(), ignore_index=True)
您没有指定sch
列会发生什么,所以我忽略了它。在我当前的解决方案中,此列将获得值0
。
答案 2 :(得分:1)
q1 q2 q3
0 Yes Yes No
1 Yes No No
2 Yes No No
3 Yes Yes Yes
4 1 0.5 0.25
输出:
.env
答案 3 :(得分:1)
让我们使用pd.concat
,mean
,to_frame
和T进行转置。
pd.concat([df,df.replace({'Yes':True,'No':False}).mean().to_frame().T.assign(sch='acc')])
输出:
q1 q2 q3 sch
0 Yes Yes No acc
1 Yes No No acc
2 Yes No No acc
3 Yes Yes Yes acc
0 1 0.5 0.25 acc