加入MultiIndex DataFrames创建空字段[大熊猫]

加入MultiIndex DataFrames创建空字段[大熊猫]

问题描述:

我想在两个字段'date_key'和'user_uuid'中加入两个数据框,但是当我做时我只有一个空集,尽管存在重叠当我搜索表格进行匹配时。加入MultiIndex DataFrames创建空字段[大熊猫]

数据框一个(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 

数据框两(definedRIDs)看起来像:

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 

我确信,这样它看起来像this example剥离出来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) 

但是,当我出口的dataframes到CSV文件,搜查他们手动,我有两个文件中匹配的user_uuid和date_key组合。任何想法,为什么我在加入这个不匹配?

谢谢

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

正确的解决办法,其实是加入不带指数的帧(左)在框架与右侧的multindex:

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') 

希望这有助于以后别人不会犯这个错误,并澄清与索引一点连接。

复位的icloset据帧索引。当您指定on参数时,它会尝试匹配列,但icloset帧中没有date_keyuser_uuid列(因为它们位于索引中),因此无法找到匹配项。

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

如果您使用的on参数,传递的价值观应该是列名。

+0

当我这样做时,我提出了一个断言错误(它没有附加信息),除了追踪发生在:'如果self.right_index: 如果不是((len(self.left_on)== self.right。 index.nlevels)): raise AssertionError()' – quaintm

+0

@quaintm嗯奇怪。但'pd.merge(definedRIDs,icloset.reset_index(),on = ['date_key','user_uuid'])'应该可以正常工作。 –

+1

你是正确的,一旦键是相同的类型,合并选项没有索引的作品!尽管如此,联接似乎需要索引。 – quaintm