我对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数据框架,大多数解决方案不需要循环和迭代,这就是为什么它是如此快速和有效的工具。