1

我试图了解dask如何帮助我对庞大的数据集进行数据转换。我需要执行的任务如下面的 pandas 示例。

import pandas as pd
pdf = pd.DataFrame({'ID': ['A', 'B', 'C', 'D', 'A', 'B', 'B', 'B', 'C'],
                    'VAL1': [0,1,4,1,4,1,1,1,4],
                    'VAL2': [0,3,4,3,4,3,3,3,4],
                    'VAL3': [4,3,4,3,4,3,3,3,4],
                    'VAL4': [4,3,4,3,4,3,3,3,4]})
vals1 = ['VAL1', 'VAL2']
vals2 = ['VAL3', 'VAL4']
pdf[vals1] = pdf[vals1].applymap(lambda x: 1 if x > 1 else 0)
pdf[vals2] = pdf[vals2].applymap(lambda x: 1 if x < 4 else 0)
pdf['ANY1'] = pdf[vals1+vals2].apply(lambda row: 1 if sum(row) > 0 else 0,axis=1)
pdf['ONES'] = 1
pdf.groupby(['ID']).sum()

当我开始使用时:

import dask.dataframe as dd
df = dd.from_pandas(pdf, chunksize=9)
df...

当我尝试在多列中转换数据并一次性添加更多列时,我立即卡住了。

所以我的问题是如何从 pandas dask 重新创建示例并单次传递数据?

4

2 回答 2

0

鉴于 MaxUs answere 我想出了以下内容,但是我不知道这是否是通过 dask 一次性完成的?

import pandas as pd
pdf = pd.DataFrame({'ID': ['A', 'B', 'C', 'D', 'A', 'B', 'B', 'B', 'C'],
                    'VAL1': [0,1,4,1,4,1,1,1,4],
                    'VAL2': [0,3,4,3,4,3,3,3,4],
                    'VAL3': [4,3,4,3,4,3,3,3,4],
                    'VAL4': [4,3,4,3,4,3,3,3,4]})
vals1 = ['VAL1', 'VAL2']
vals2 = ['VAL3', 'VAL4']
import dask.dataframe as dd
import numpy as np
df = dd.from_pandas(pdf, chunksize=9)
dd.concat([df.ID, (df[vals1] > 1), (df[vals2] < 4)], axis=1).assign(ANY1 = lambda data: data[vals1+vals2].apply(lambda x: 1 if sum(x) > 0 else 0, axis=1), ONES = 1).groupby(['ID']).sum().astype(np.uint32).compute()
于 2016-07-07T08:28:29.733 回答
0

这是我尝试一次性完成的尝试:

In [125]: pd.concat([df.ID, (df[vals1] > 1), (df[vals2] < 4)], axis=1).assign(ONES=1).groupby('ID').sum()
Out[125]:
    VAL1  VAL2  VAL3  VAL4  ONES
ID
A    1.0   1.0   0.0   0.0     2
B    0.0   4.0   4.0   4.0     4
C    2.0   2.0   0.0   0.0     2
D    0.0   1.0   1.0   1.0     1

我还不知道如何ANY1根据以前的更改计算列...

于 2016-07-06T19:43:43.433 回答