我有一个包含几列的数据帧(事件):id,...,click,...列“ click”是一个布尔变量,其值为'True'或'False'。我在下面使用Python中的代码来计算每个“ id”的“ True”数:
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
我希望结果是一个新的数据框,如下所示(以“ True”的数量为准):
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() 谢谢!!!
正确的方法是什么?
非常感谢您!
答案 0 :(得分:0)
您可以改用sum()
-因为True
的值为1,而False
的值为0。
答案 1 :(得分:0)
>>> sum(map(bool,[True, True, False, False, False, True]))
3
答案为3,因为 True == 1
或仅求和:
>>> sum([True, True, False, False, False, True])
3
或使用count():
lst = [True, True, False, False, False, True]
print(count(lst)
答案 2 :(得分:0)
我假设您使用的是熊猫数据框,所以我添加了一种快速方法。顺便说一句:实际上,您对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
答案 3 :(得分:0)
感谢所有答案!赞赏!
如果是这样的话:
原始数据框:
public void Post(List<InsertNotificationLogs> request)
{
var notifications = request.ConvertTo<List<NotificationLogs>>();
notifications.ForEach(x => x.AuditUserId = UserAuth.Id);
Db.InsertAll(notifications);
}
我希望结果是一个新的数据框,如下所示(以“ True”的数量为准):
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
谢谢!!!