我想检查熊猫数据帧,如果测试主题("ID")在某一天提供了信息(数据点)



我对Python和Pandas相当陌生,所以我想这可能是显而易见的,但我就是不明白。

我有一个数据集,其中包含列"id"(随机数),"日期"和当天的数据点"活动">

如果我有5个(或X个)ID, ID:[1,2,3,4,5]然后每个ID都有日期运行,比如说30天。(ID重复30次),

所以ID 1的日期是从2018-11-1到2018-11-30,2、3等等也是如此。最后,我们有一个名为"activity"的列。它的值可能是0或者X>

0。前3行[1,2018-11-1,70],[1,2018-11-2,45],[1,2018-11-3,0]

所以换句话说,记录活动的天数是随机的。

计算每个ID的发生次数(记录了多少天的活动)的最简单方法是什么?甚至是哪个id出现次数最多。

我认为嵌套的循环将是要走的路,但后来我意识到,它不是那么直接,因为我还需要检查ID是否在每次迭代期间相同,然后在ID更改时重置它。所以一个没有重复值的id列表也许可以,但这开始感觉有点太复杂了,因为这是一个次要的检查。

我也知道这可能不是迭代pd的正确方法。数据框架,但你知道我在想什么'


IDs = [1,2,3,4,5]
i = 1
occ = [0,0,0,0,0]
for ID in IDs:
for row in dataframe:
if i == row[0]:
if row[2] > 0:
occ[i-1] += 1
else:
i = i + 1
if i == 6:
break

我用下面的代码创建了一个虚拟数据框架:

df = pd.DataFrame()
ID = [1,2,3,4,5]
Dates = ['01/05/2022', '02/03/2022', '12/03/2022', '02/03/2022', '02/04/2022']
Activity = [0, 1, 4, 5, 1]
df['ID'], df['Date'], df['Activity'] = ID, Dates, Activity

给我这个数据框架:

ID        Date  Activity
0   1  01/05/2022         0
1   2  02/03/2022         1
2   3  12/03/2022         4
3   4  02/03/2022         5
4   5  02/04/2022         1

现在,使用以下代码,我能够找到"最大"活动级别(ID为4的用户)并取第一个索引(索引0)来给我ID号:

df.loc[df['Activity'].idxmax()][0]

我得到了ID: 4,正如我所希望的max。没有出现。

你也可以这样做:

print(df[['ID']][df.Activity == df.Activity.max()])

达到相同的效果。

作为一般提示-使用pandas数据框架,大多数解决方案不需要循环和迭代,这就是为什么它是如此快速和有效的工具。

最新更新