Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pydatatable中连接具有不同键列名的两个数据帧?_Python_Py Datatable - Fatal编程技术网

Python 如何在pydatatable中连接具有不同键列名的两个数据帧?

Python 如何在pydatatable中连接具有不同键列名的两个数据帧?,python,py-datatable,Python,Py Datatable,我有一个X数据框 DT_X = dt.Frame({ 'date':['2020-09-01','2020-09-02','2020-09-03'], 'temp':[35.3,32.9,43.2] }) DT_X.key='date' 另一个数据帧Y为 DT_Y = dt.Frame({ 'stop_date' : ['2020-08-01','2020-09-01','2020-09-03','2020-09-07'], 'i

我有一个X数据框

DT_X = dt.Frame({
    
    'date':['2020-09-01','2020-09-02','2020-09-03'],
    'temp':[35.3,32.9,43.2]
    
})
DT_X.key='date'
另一个数据帧Y为

DT_Y = dt.Frame({
    
    'stop_date' : ['2020-08-01','2020-09-01','2020-09-03','2020-09-07'],
    'is_arrested':[True,False,False,True]
    
})
现在我想在X和Y上执行连接操作,因为我应该在X数据帧上分配一个键

DT_X = dt.Frame({
    
    'date':['2020-09-01','2020-09-02','2020-09-03'],
    'temp':[35.3,32.9,43.2]
    
})
DT_X.key='date'
接下来我加入X和Y作为

DT_Y[:,:,join(DT_X)]

这里它抛出了一个错误

In [9]: DT_Y[:,:,join(DT_X)]                                                                                                                                                                      
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-a3bc1690fb98> in <module>
----> 1 DT_Y[:,:,join(DT_X)]

ValueError: Key column `date` does not exist in the left Frame
连接的DT可被视为:

Out[11]: 
   | date        is_arrested  temp
-- + ----------  -----------  ----
 0 | 2020-08-01            1  NA  
 1 | 2020-09-01            0  35.3
 2 | 2020-09-03            0  43.2
 3 | 2020-09-07            1  NA  

[4 rows x 3 columns]
以下是预期输出:

Out[13]: 
   | stop_date   is_arrested  temp
-- + ----------  -----------  ----
 0 | 2020-08-01            1  NA  
 1 | 2020-09-01            0  35.3
 2 | 2020-09-03            0  43.2
 3 | 2020-09-07            1  NA  

[4 rows x 3 columns]

现在,
join()
仅支持两个框架中的相同列名,有关详细信息,请参阅。但是,有一种方法可以改进join功能/API

同时,如果您不想重命名这些列,可以执行以下操作

DT_Y_date = DT_Y[:, {"date":f[0], "is_arrested":f[1]}]
DT_YX_joined = DT_Y_date[:, :, join(DT_X)]
然后,
DT_YX_joined
将获得您要查找的数据

   | date        is_arrested  temp
-- + ----------  -----------  ----
 0 | 2020-08-01            1  NA  
 1 | 2020-09-01            0  35.3
 2 | 2020-09-03            0  43.2
 3 | 2020-09-07            1  NA 
你甚至可以做像这样的一行

DT_YX_joined = DT_Y[:, {"date":f[0], "is_arrested":f[1]}][:, :, join(DT_X)]

但它可能不够可读。另外请注意,此处不创建数据副本,只更改列名。

那么更改列名有什么问题吗?DT_Y:stop_date列显示:当活动完成时,其中as DT_X:date显示今天是几天。所以,如果将DT_Y列名更改为最新名称,进一步分析就没有意义了。我希望你理解我的观点。啊,它完全改变了吗?我觉得它给了我一个别名column@myamulla_ciencia你能发布预期的输出吗?另外,目前pydatatable中的联接并不健壮。@sammywemmy我刚刚在问题本身中添加了预期的输出。
DT_Y_date = DT_Y[:, {"date":f[0], "is_arrested":f[1]}]
DT_YX_joined = DT_Y_date[:, :, join(DT_X)]
   | date        is_arrested  temp
-- + ----------  -----------  ----
 0 | 2020-08-01            1  NA  
 1 | 2020-09-01            0  35.3
 2 | 2020-09-03            0  43.2
 3 | 2020-09-07            1  NA 
DT_YX_joined = DT_Y[:, {"date":f[0], "is_arrested":f[1]}][:, :, join(DT_X)]