依靠布尔变量

我有一个数据框(事件)有几列:id,...,click,...列“click”是一个布尔变量,其值为“True”或“False”。我使用下面的 Python 代码来计算每个“id”的“真”数量:


click_yes = events.groupby("id")["click"].count(True).reset_index()


结果出现了一个错误:TypeError: count() takes 1 positional argument but 2 were given


示例输出:


如果情况是这样的原始数据框:


   id  click

0   0   True

1   1   False

2   1   True

3   1   True

4   2   True

5   2   False

6   3   False

我希望结果是一个新的数据框,像这样(计算“真”的数量):


   id  click_count

0   0   1

1   1   2

2   2   1

3   3   0

如何修改我的以下代码(不起作用)或编写新代码以实现我的期望?


click_yes = events.groupby("id")["click"].count(True).reset_index() 谢谢!!!


这样做的正确方法是什么?


料青山看我应如是
浏览 138回答 4
4回答

婷婷同学_

您可以sum()改用 - 因为True值是 1 并且False是 0。

MM们

>>> sum(map(bool,[True, True, False, False, False, True]))3答案是 3,因为True == 1或只有总和:>>> sum([True, True, False, False, False, True])3或使用计数():lst = [True, True, False, False, False, True] print(count(lst)

侃侃无极

我假设您使用的是熊猫数据框,所以我添加了一种快速方法。BTW:实际上你的使用count是错误的。它只能返回某些东西(例如列表)的长度,但不能用作过滤器。当您添加了所需的输出时,我现在了解您尝试实现的目标。我添加了一个新的片段。我再次过滤“真”值。在下一行中,我根据其列内容开始对行求和。import pandas as pd# Create your list# initialize list of listsdata = [ [0, True], [1, False], [1, True], [5, True], [2, True],          [2, False], [3, False], [2, True], [4, False], [1, True],         [6, True], [2, True]]# Create the pandas DataFramedf = pd.DataFrame(data, columns=['id', 'click'])df = df.sort_values(by=['id'])#------------------------------------------------------------------------------## Filter for key value truedf = df[df.click == True]# Merge lines depending of it's column contentfiltered =  df.groupby('id').agg({ 'click':'sum'}).reset_index()# If we need it, rename the columnfiltered = filtered.rename(columns={"click": "click_count"})# Print out the listprint(filtered)如果这是您的输入(数据框):    id  click0    0   True1    1  False2    1   True9    1   True4    2   True5    2  False7    2   True11   2   True6    3  False8    4  False3    5   True10   6   True使用该代码段,您将获得以下输出:    id  click_count0   0          1.01   1          2.02   2          3.03   5          1.04   6          1.0

萧十郎

如果情况是这样的:原始数据框:   id  click0   0   True1   1   False2   1   True3   1   True4   2   True5   2   False6   3   False我希望结果是一个新的数据框,像这样(计算“真”的数量):   id  click_count0   0   11   1   22   2   13   3   0如何修改我的以下代码(不起作用)或编写新代码以实现我的期望?click_yes = events.groupby("id")["click"].count(True).reset_index()谢谢 !!!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python