如何基于python-pandas的互信息合并两个数据帧?

时间:2016-04-29 19:16:49

标签: python pandas dataframe

给定两个数据框df1df2,其中包含item_id-ratingitem_id-class的信息:

df1:

B0006IYIMW 5.0
B000A56PUO 3.0
B000AMLQQU 4.0
B000OVNMGE 1.0

df2:

B0006IYIMW iphone
B000OVNMGE samsung
B000AMLQQU htc
B000A56PUO nokia

我希望合并df1df以获取item_id-class-rating的完整信息,因此生成的数据框应为:

B0006IYIMW iphone 5.0
B000OVNMGE samsung 1.0
B000AMLQQU htc 4.0
B000A56PUO nokia 3.0

请注意,两个数据框的顺序可能不同。

你能告诉我怎么做吗?提前谢谢!

3 个答案:

答案 0 :(得分:4)

试试这个:

import pandas as pd

df1 = pd.DataFrame([['B0006IYIMW',5.0],['B000A56PUO', 3.0],['B000AMLQQU', 4.0],['B000OVNMGE', 1.0]],columns=('item_id','rating'))
df2 = pd.DataFrame([['B0006IYIMW','iphone'],['B000A56PUO', 'nokia'],['B000AMLQQU', 'htc'],['B000OVNMGE', 'samsung']],columns=('item_id','class'))

df_merged = df1.merge(df2,on='item_id')

print df_merged

答案 1 :(得分:1)

通常情况下,当我无法找到解决方案时,我开始破解自己的解决方案,当我获得许多糟糕的结果并最终获得正确的解决方案时,其他人已经发布了{{1解决方案:)无论如何它在这里

one-line

答案 2 :(得分:1)

设置

import pandas as pd

idx = pd.Index(['B0006IYIMW', 'B000A56PUO', 'B000AMLQQU', 'B000OVNMGE'],
               name='item-id')
df1 = pd.DataFrame([5., 3., 4., 1.],
                   columns=['rating'], index=idx)
df2 = pd.DataFrame(['iphone', 'samsung', 'htc', 'nokia'],
                   columns=['class'], index=idx)

解决方案

df = pd.concat([df2, df1], axis=1)

示范

print df 

              class  rating
item-id                    
B0006IYIMW   iphone     5.0
B000A56PUO  samsung     3.0
B000AMLQQU      htc     4.0
B000OVNMGE    nokia     1.0