这是我的任务的简短描述。我有一个如下所示的数据框:df = pd.DataFrame([[2, 0], [2, 1], [1, 0], [1, 0], [1, 1], [3, 0]], columns=['topic', 'strange'])
对于每个主题,我都需要计算“奇怪”行的百分比。所以结果就像这个1 - 1/3, 2 - 1/2, 3 - 0
。
我提出的最有效的解决方案是:
a = df['topic'].value_counts()
b = df[df['strange'] == 1]['topic'].value_counts()
res = (b / a).fillna(0)
此外,这很可能是合理的,而且不是那么难看,我相信通过智能的groupby操作可以更轻松地实现这一点。
有没有人有其他建议?寻找更短或更快的替代方案。
答案 0 :(得分:2)
如果strange
保证仅为0或1,则可以采用均值:
In [7]: df.groupby("topic").mean()
Out[7]:
strange
topic
1 0.333333
2 0.500000
3 0.000000