Pandas DataFrame 按条件分组和聚合计数

3

我已经开始尝试数据分析以及相关工具:Pandas、Numpy、Jupyter等...

我正在处理的任务很简单,我可以轻松地使用常规Python完成。然而,我更感兴趣的是探索Pandas,并因此寻找Pandas解决方案。

我有这个简单的Pandas DataFrame。时间戳列只是一个Unix时间戳,但为了使事情更易读,我只是放置了一个更舒适的数字:

id 时间戳 成功
1 9999
2 1111
3 9999
4 1111
5 9999
6 1111

我想按时间戳进行分组,但我想要另一个聚合列,这是成功列的结果:如果为True,则计为1,如果为False,则计为0。

我希望下面的表可以说明我尝试实现的内容。基本上,1111有三个True,因此总和为3。9999有两个True和一个False,因此总和为2。

时间戳 成功
1111 3
9999 2
1个回答

3
import pandas as pd

# The DataFrame
a = {
    'id': [1, 2, 3, 4, 5, 6],
    'timestamp': [9999, 1111, 9999, 1111, 9999, 1111],
    'success': [True, True, False, True, True, True]
}
df = pd.DataFrame(a)

# Group by timestamp and calculate the sum of success
result = df.groupby('timestamp')['success'].sum().reset_index()

# Result
print(result)

你的意思是这样吗?您通过时间戳对数据框进行分组,然后计算真值的频率。

似乎它在运行,你能否再详细说明每个步骤,特别是reset_index是做什么的? - Leonardo
1
reset_index()会删除旧索引并将其设置回默认的0、1、2。您可以尝试将其删除。它会给出相同的结果,但在1111和9999前面会有0 1。现在关于sum()部分。尝试用数字替换True和False。您会看到差异。如果我没记错的话,Python在添加布尔值时将True转换为1,将False转换为0。因此,对它们求和会得到所需的结果。如果您的True和False值是数字,我们无法使用此方法来查找频率。 - Skapis9999

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接