首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vaex组合数据

使用Vaex组合数据
EN

Stack Overflow用户
提问于 2019-06-26 07:26:39
回答 2查看 7.9K关注 0票数 3

我有一个大的.csv文件,大约有1.5亿行。我仍然可以将整个数据集放入内存中,并使用Pandas进行群比和组合。例如..。

代码语言:javascript
复制
aggregated_df = df.groupby(["business_partner", "contract_account"]).sum()

在上面的示例中,dataframe包含两个整数列,business_partnercontract_account,它们用作分组操作的键。其余的列都是浮点特性,我想要聚合。

然而,这只使用我的工作站上的48个核心中的一个。我试图使用金库来利用我的所有内核,但无法找到执行groupby和组合的API调用。也许这在Vaex中还不可能?

编辑:

  1. 我知道这个操作可以在dask中完成,但是对于这个问题,我想集中讨论Vaex。
EN

回答 2

Stack Overflow用户

发布于 2019-07-15 15:30:22

您可以在https://docs.vaex.io/en/latest/api.html#vaex.dataframe.DataFrameLocal.groupby中找到一个有用的示例。

下面是按2列分组并获得和聚合的示例:

代码语言:javascript
复制
import pandas as pd, numpy as np
import vaex

# Create input dataframe

n=10**6  # Change this to adjust df size

a_c1 = [1,2,3]*n
a_c2 = [1,1,2,2,3,3]*int(n/2)
a_x = np.arange(float(len(a_c1)))
df = pd.DataFrame({'c1':a_c1,'c2':a_c2,'x1':a_x, 'x2':a_x})

# Convert dataframe to vaex

# dfv = vaex.from_pandas(df) # This also works, but it's slower
dfv = vaex.from_arrays(c1=a_c1, c2=a_c2, x1=a_x, x2=a_x)

df_result1 = df.groupby(['c1','c2']).sum()
df_result2 = dfv.groupby(['c1','c2'],agg='sum')

产出结构将略有不同:

代码语言:javascript
复制
> print(df_result1)

                 x1            x2
c1 c2                            
1  1   7.499985e+11  7.499985e+11
   2   7.500000e+11  7.500000e+11
2  1   7.499990e+11  7.499990e+11
   3   7.500005e+11  7.500005e+11
3  2   7.499995e+11  7.499995e+11
   3   7.500010e+11  7.500010e+11

> print(df_result2)

  #    c1    c2      x_1_sum      x_2_sum
  0     2     3  7.50000e+11  7.50000e+11
  1     2     1  7.49999e+11  7.49999e+11
  2     3     2  7.5e+11      7.5e+11
  3     3     3  7.50001e+11  7.50001e+11
  4     1     2  7.5e+11      7.5e+11
  5     1     1  7.49998e+11  7.49998e+11
票数 8
EN

Stack Overflow用户

发布于 2019-07-05 08:27:57

据我所知,您将不得不手动调整分组的限制和回收箱数量--但是“binby”参数应该在vaex中完成工作:

代码语言:javascript
复制
df.sum([list of columns you want summed],binby=["business_partner", "contract_account"],limits=['minmax','minmax'],
       shape=[business_partner_bins,contract_account_bins])

如果要将所有列加在一起,可以替换要由df.column_names求和的列列表。

PS。我刚刚注意到在保险库中有一个群函数,但我没有使用它的经验。https://vaex.readthedocs.io/en/latest/api.html?highlight=groupby#vaex.dataframe.DataFrameLocal.groupby

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

https://stackoverflow.com/questions/56767423

复制
相关文章

相似问题

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