合并具有几乎相同字段的行

时间:2019-07-12 05:50:18

标签: python-3.x pandas

我有两个数据框,并希望将它们组合成一个数据框。我使用了一个通用键来合并两个框架。最终结果是一个数据帧,其中一些行具有几乎相同的字段,只有少数列具有不同的值。考虑添加适当的列,我想将这些几乎相同的行合并为单个行。 这是数据帧:

商店:

Banner - Region - Store ID 

Walmart - NC - 66999 

TJ - NY - 4698

价格:

Price - Store ID - UPC 

3.6 - 66999 - 234565 

4.5 - 4698 - 334526 

我已经合并了两个帧,并播放了一点以收敛到所需的帧。

store_cross = pd.crosstab(stores['Store ID'],stores['Region'],margins=True)
merged_df2 = pd.merge(store_cross,prices,left_on='Store ID', right_on='Store ID')
merged_df2 = pd.merge(merged_df2,stores,left_on='Store ID', right_on='Store ID')

这是到目前为止的结果:

NY - NC - Price - UPC - Banner 

1 - 0 - 3.6 - 234565 - Walmart 

0 - 1 - 4.5 - 334526 - TJ 

可以在不同的商店购买UPC。这意味着框架中还有其他行具有相同的UPC和横幅,但位置不同。

我想要拥有的是这样的:

Banner - UPC - NC - NY 

Walmart - 234565 - 3.9 - 3.6 

TJ - 334526 - 4.5 - 4.3 

1 个答案:

答案 0 :(得分:1)

我相信您首先需要merge,然后需要DataFrame.pivot_table

df = pd.merge(stores, prices, on='Store ID')
store_cross = df.pivot_table(index=['Banner', 'Store ID','UPC'],
                             columns='Region',
                             values='Price', 
                             aggfunc='sum').reset_index()

print (store_cross)
Region   Banner  Store ID     UPC   NC   NY
0            TJ      4698  334526  NaN  4.5
1       Walmart     66999  234565  3.6  NaN