4 回答
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)
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
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()
谢谢 !!!
添加回答
举报