Python 如何在pydatatable中连接具有不同键列名的两个数据帧?
我有一个X数据框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
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)]