首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用条件将数据分割

用条件将数据分割
EN

Stack Overflow用户
提问于 2021-10-27 15:36:19
回答 1查看 49关注 0票数 0

我有一张像这样的数据

代码语言:javascript
复制
       vid   sid   pid  ts
1      101    123  ...
2      102    125
3      102    125
4      102    125

本质上,vid是一个访问者idsid是一个会话ID

我正在尝试将有大约170万行长度的df划分为长度约为100 K的较小的数据格式。

代码语言:javascript
复制
for i in range(0, len(df), s):
    sdf = df.iloc[i:i+s]

但是,我不希望在会话中间对数据进行切片(所以切片部分中的最后一行不是最后一行)。

例如,下面是一个问题,因为它分割了会话id sid仍在发生的数据

代码语言:javascript
复制
         vid   sid   pid  ts
99999    101    144  ...
99999    102    145
100000   102    145
--------------------------
100001   102    145

我正在寻找某种方法来实现这样的结果:如果在sids被切断的地方发生了断线,只需简单地将断线推到小岛屿发展中国家不再相同为止,就像

代码语言:javascript
复制
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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-27 16:02:48

你可以使用达斯克

代码语言:javascript
复制
import dask.dataframe as dd
ddf = dd.from_pandas(df.set_index('sid'), npartitions=17).reset_index()

请注意,分区的数目并不总是强制为17。达克可能会决定以不同的方式进行分区,以便将索引保留在一个分区中--这正是您想要的。或者,您也可以指定我认为的行的大小或数目。

然后,您可以使用类似的方法获得分区

代码语言:javascript
复制
ddf.get_partition(3).compute() 

或者直接使用dask进行分布式计算,因为这就是它的目的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69741564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档