我有一张像这样的数据
vid sid pid ts
1 101 123 ...
2 102 125
3 102 125
4 102 125本质上,vid是一个访问者id,sid是一个会话ID
我正在尝试将有大约170万行长度的df划分为长度约为100 K的较小的数据格式。
for i in range(0, len(df), s):
sdf = df.iloc[i:i+s]但是,我不希望在会话中间对数据进行切片(所以切片部分中的最后一行不是最后一行)。
例如,下面是一个问题,因为它分割了会话id sid仍在发生的数据
vid sid pid ts
99999 101 144 ...
99999 102 145
100000 102 145
--------------------------
100001 102 145我正在寻找某种方法来实现这样的结果:如果在sids被切断的地方发生了断线,只需简单地将断线推到小岛屿发展中国家不再相同为止,就像
for i in range(0, len(df), s):
if i['sid'][-1] != (i+1)['sid']:
sdf = df.iloc[i:i+s]
else:
# check until sessions are no longer equal 发布于 2021-10-27 16:02:48
你可以使用达斯克
import dask.dataframe as dd
ddf = dd.from_pandas(df.set_index('sid'), npartitions=17).reset_index()请注意,分区的数目并不总是强制为17。达克可能会决定以不同的方式进行分区,以便将索引保留在一个分区中--这正是您想要的。或者,您也可以指定我认为的行的大小或数目。
然后,您可以使用类似的方法获得分区
ddf.get_partition(3).compute() 或者直接使用dask进行分布式计算,因为这就是它的目的。
https://stackoverflow.com/questions/69741564
复制相似问题