Python 如何通过按熊猫中的特定位置分组来应用函数?
上面是数据帧类型。 我想做的是将每个名称视为一个子集,直到类型发生更改,并获得减去第一个和最后一个值的值价值取向每个子集的 最终想要的形状似乎是这种类型Python 如何通过按熊猫中的特定位置分组来应用函数?,python,pandas,Python,Pandas,上面是数据帧类型。 我想做的是将每个名称视为一个子集,直到类型发生更改,并获得减去第一个和最后一个值的值价值取向每个子集的 最终想要的形状似乎是这种类型 logged_at type name values 2020-08-17 00:02:22 weak AA 55 2020-08-17 00:12:20 weak AA 54 2020-08-17 00:22:24 weak AA 53 2020-08-1
logged_at type name values
2020-08-17 00:02:22 weak AA 55
2020-08-17 00:12:20 weak AA 54
2020-08-17 00:22:24 weak AA 53
2020-08-17 00:32:25 weak AA 50
2020-08-17 00:42:28 strong AA 44
2020-08-17 00:52:22 strong AA 33
2020-08-17 01:02:20 strong AA 32
2020-08-17 01:22:24 weak AA 56
2020-08-17 01:32:25 weak AA 55
2020-08-17 01:42:28 weak AA 43
无论何时更改类型,都应该分配一个秩值,以便可以区分每个子集,但我现在想到的是,通过iTerPles创建一个新列表,在检查类型、提高秩并将其存储在列表中时,会出现一个不同于上一个类型的类型,然后是一个新列。我想把它添加到。。。
我不知道这是否有效。大约有3亿行,因此我正在寻找最有效的方法。如果数据帧是按时间排序的,只需按如下方式删除重复项即可
logged_at type name values rank
2020-08-17 00:02:22 weak AA 5 1
2020-08-17 00:42:28 strong AA 12 2
2020-08-17 01:22:24 weak AA 13 3
您可以分阶段将其打破:
df.drop_duplicates(by = 'logged_at', keep = 'first')
您可以重置索引。然而,有3亿排,我不认为熊猫是正确的选择。300mm排?你是如何存储它们的?@BEN_-YO现在它存储在dynamodb中,每次使用它都会被调用。@BEN_-YO我错了。那是3000万。有时记录的数量是不一样的。相差10分钟我搞错了。那是3000万。谢谢你的回复!
# get the first values :
top = df.loc[df["type"].ne(df["type"].shift())]
# get the last values
bottom = df.loc[df["type"].ne(df["type"].shift(-1))]
#get the difference in values and generate the rank :
top.assign(values=top["values"].array - bottom["values"].array,
rank=range(1, 1 + len(top)))
logged_at type name values rank
0 2020-08-17 00:02:22 weak AA 5 1
4 2020-08-17 00:42:28 strong AA 12 2
7 2020-08-17 01:22:24 weak AA 13 3