我试图将多个列添加到dask数据框中以存储apply函数的结果。这将是我关于堆栈溢出的第一个问题,我希望这不会太长!
当前,我有这段工作代码:
create or replace procedure fire
is
v_full_name VARCHAR2(500);
sal varchar(200);
jobid varchar(100);
cpct varchar(50);
mgid varchar(25);
did varchar(20);
cid varchar(20);
rid varchar(20);
lid varchar(20);
Begin
execute immediate 'create table resquery as
(
select HR.EMPLOYEES.FIRST_NAME||'' ''||HR.EMPLOYEES.LAST_NAME AS
Full_Name,HR.EMPLOYEES.SALARY as sal,HR.EMPLOYEES.JOB_ID as ji,
HR.EMPLOYEES.COMMISSION_PCT as cmpct,HR.EMPLOYEES.MANAGER_ID as
mgid,HR.EMPLOYEES.DEPARTMENT_ID as dep,HR.COUNTRIES_EXTERNAL.COUNTRY_ID as
country,HR.DW_REGION.R_ID as region,
HR.LOCATIONS.LOCATION_ID as loc
into v_full_name,sal,jobid,cpct,mgid,did,cid,rid,lid
from HR.EMPLOYEES
join HR.DEPARTMENTS ON
HR.EMPLOYEES.DEPARTMENT_ID=HR.DEPARTMENTS.DEPARTMENT_ID
join HR.LOCATIONS ON HR.DEPARTMENTS.LOCATION_ID=HR.LOCATIONS.LOCATION_ID
join HR.COUNTRIES_EXTERNAL ON HR.LOCATIONS.COUNTRY_ID=HR.COUNTRIES_EXTERNAL.COUNTRY_ID
join HR.DW_REGION ON HR.COUNTRIES_EXTERNAL.REGION_ID=HR.DW_REGION.R_ID
where HR.COUNTRIES_EXTERNAL.COUNTRY_ID=''US''
AND trunc(HR.EMPLOYEES.HIRE_DATE) BETWEEN TO_DATE(''16/08/2002'',''DD/MM/YYYY'') AND
TO_DATE(''07/12/2007'',''DD/MM/YYYY''))';
end;
/
本质上,我从熊猫数据框“天气”创建为黄昏数据框,然后将函数“ dfFunc”应用于数据框的每一行。
这段代码可以正常工作,因为输出“ res”是原始天气数据帧,带有新列“ NewCol1”。
我的困惑在于,如果我希望函数返回一个列表而不是一个值,那么该如何在dask数据框中创建多个列。
通过查看以前的线程,可以假设使用列表将列添加到Pandas Dataframe。因此更改行
from dask import dataframe as dd
from multiprocessing import cpu_count
nCores = cpu_count()
import dask.multiprocessing
dask.config.set(scheduler='processes')
def dfFunc(varA, varB):
# Some calculations...
return NewValue
ddf = dd.from_pandas(weather,npartitions=nCores)
ddf['NewCol1'] = ddf.map_partitions(lambda df: df.apply(lambda x: dfFunc(x['VarA'],x['VarB']), axis=1))
res = ddf.compute()
到以下内容:
return NewValue
ddf['newCol1'] =
但是,它似乎无法与dask数据框一起使用,或者我只是不知道如何正确地编写代码,因为我只得到一列带有值列表的列。
return [NewValue1,NewValue2]
ddf =
作为奖励,我也想在此过程中为这些列分配名称,但是ddf.compute()返回一个pandas数据帧,在此之后添加列名称应该不太困难。
答案 0 :(得分:0)
似乎在堆栈溢出时我已经错过了一个类似的问题。至少有一个问题可以解决这个问题。