pandas 我想在Panda数据框中检查测试对象(“ID”)是否在某一天提供了信息(数据点)

2w2cym1i  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(86)

我是Python和Pandas的新手,所以我想这可能是显而易见的,但我就是不明白。
我有一个数据集,其中包含列“ID“(随机数)、“日期”和当天的数据点“活动”
因此,如果我有五个(或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的发生次数最多。
我想嵌套的for循环是可行的方法,但后来我意识到这并不是那么简单,因为我还需要在每次迭代中检查ID是否相同,然后在ID改变时重置它。因此,可能会有一个包含ID但没有重复值的列表,但这开始感觉有点太复杂了,因为这是一件需要检查的小事。
我也知道这可能不是迭代pd.dataframe的正确方法,但你应该明白我的想法。

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

`

zwghvu4y

zwghvu4y1#

我使用以下代码创建了一个虚拟 Dataframe :

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

给我这个 Dataframe :

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,正如我所希望的最大发生次数。
您也可以这样做:

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

以实现相同的目的。
作为一个通用提示-使用Pandas Dataframe ,大多数解决方案不需要循环和迭代,这就是为什么它是一个快速和有效的工具。

相关问题