0

我试图在两个字段“date_key”和“user_uuid”上加入两个数据帧,但是当我这样做时,我只得到一个空集,尽管在我搜索匹配表时存在重叠。

数据帧一(icloset)看起来像:

In [167]: icloset.head()
Out[167]: 
                                           count     ASL75
date_key user_uuid                                            
20130917 000a26bf-e7ff-3124-9b00-b227ee155e7f     11   9.03510
         0017b444-83f7-3adb-9727-926de4041731      3  45.05510
         0022c69b-f1f5-301e-812d-89725e17c9dd     19  31.71980
         00453fcd-93bd-373e-9248-f821ce8279f2     10  17.68785
         004a050d-f855-3c9c-bfe0-5c504df965bc      8  45.20115

数据帧二(定义的 RID)看起来像:

In [170]: definedRIDs.head()
Out[170]: 
     rid                             user_uuid rid_slots last48status bad_RID  \
0  48830  2eda12da-d613-3e1e-95de-de3c75a5f9ef         1  Fulfilling    False   
1  51025  a466303a-d66d-3db8-b640-c4d57d134404         1  Fulfilling    False   
2  51457  c41d87d3-8abc-328d-ae00-c63d7cf81ef2         1   Fulfilled    False   
3  48626  97ff5c81-e5df-30ac-9b7a-bda73fbf499f         1   Fulfilled    False   
4  51450  0ac72f09-0fb7-35ae-b8a2-ee6d131100b0         1   Fulfilled    False   

   date_key  
0  20130924  
1  20130927  
2  20130927  
3  20130923  
4  20130927 

我确保删除了 definedRIDs 的索引,使其看起来像文档中的这个示例

出于某种原因,当我尝试复制文档中的示例时,我在合并字段(计数和 ASL75)中得到空结果:

In [171]: definedRIDs.join(icloset,on=['date_key','user_uuid'])
Out[171]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7623 entries, 0 to 7622
Data columns (total 8 columns):
rid             7623  non-null values
user_uuid       7623  non-null values
rid_slots       7623  non-null values
last48status    7623  non-null values
bad_RID         7623  non-null values
date_key        7623  non-null values
count           0  non-null values
ASL75           0  non-null values
dtypes: bool(1), float64(2), object(5)

但是当我将数据帧导出到 csv 文件并手动搜索它们时,我在两个匹配的文件中都有 user_uuid 和 date_key 组合。关于为什么我在加入时出现这种不匹配的任何想法?

谢谢

4

2 回答 2

3

重置iclosetDataFrame 上的索引。当您指定on参数时,它会尝试匹配列,但框架中没有date_keynoruser_uuidicloset(因为它们在索引中)所以它找不到匹配项。

definedRIDs.join(icloset.reset_index(),
                 on=['date_key','user_uuid'])

如果您使用on参数,则传入的值应该是列名。

于 2013-10-01T23:30:31.337 回答
0

看起来我只需要确保键上的类型都是 dtype=object。

正确的解决方案实际上是将没有索引(左侧)的框架连接到右侧有多重索引的框架:

closet['date_key']=closet['date_key'].astype(str)
definedRIDS['date_key'] = definedRIDS['date_key'].astype(str)

icloset = closet.set_index(['date_key','user_uuid'])

RIDdata = definedRIDs.join(icloset,on=['date_key','user_uuid'],how='inner')

希望这可以帮助其他人以后不要犯这个错误,并稍微澄清一下索引连接。

于 2013-10-02T15:11:28.450 回答