为了账号安全,请及时绑定邮箱和手机立即绑定

依靠布尔变量

依靠布尔变量

料青山看我应如是 2022-06-14 15:04:23
我有一个数据框(事件)有几列: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  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() 谢谢!!!这样做的正确方法是什么?
查看完整描述

4 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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



查看完整回答
反对 回复 2022-06-14
?
MM们

TA贡献1886条经验 获得超2个赞

>>> 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)


查看完整回答
反对 回复 2022-06-14
?
侃侃无极

TA贡献2051条经验 获得超10个赞

我假设您使用的是熊猫数据框,所以我添加了一种快速方法。BTW:实际上你的使用count是错误的。它只能返回某些东西(例如列表)的长度,但不能用作过滤器。


当您添加了所需的输出时,我现在了解您尝试实现的目标。我添加了一个新的片段。我再次过滤“真”值。在下一行中,我根据其列内容开始对行求和。


import pandas as pd


# Create your list

# initialize list of lists

data = [ [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 DataFrame

df = pd.DataFrame(data, columns=['id', 'click'])

df = df.sort_values(by=['id'])



#------------------------------------------------------------------------------#


# Filter for key value true

df = df[df.click == True]

# Merge lines depending of it's column content

filtered =  df.groupby('id').agg({ 'click':'sum'}).reset_index()

# If we need it, rename the column

filtered = filtered.rename(columns={"click": "click_count"})



# Print out the list

print(filtered)

如果这是您的输入(数据框):


    id  click

0    0   True

1    1  False

2    1   True

9    1   True

4    2   True

5    2  False

7    2   True

11   2   True

6    3  False

8    4  False

3    5   True

10   6   True

使用该代码段,您将获得以下输出:


    id  click_count

0   0          1.0

1   1          2.0

2   2          3.0

3   5          1.0

4   6          1.0


查看完整回答
反对 回复 2022-06-14
?
萧十郎

TA贡献1815条经验 获得超13个赞

如果情况是这样的:


原始数据框:


   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()

谢谢 !!!


查看完整回答
反对 回复 2022-06-14
  • 4 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信