组合数据集 - 不同的大小,需要一个基于Python中ID重复的一个



我有两个数据集需要在熊猫中组合。一个包括一堆发票的信息,两张包括供应商信息。我在下面包括了一个简化的示例。

基本上,我想将供应商数据与供应商ID上的发票数据相结合,以便每个发票都从供应商信息数据中拥有供应商的本国。

我尝试以不同的方式(内部,左,外部)合并和加入,并且它并未根据我需要的重复供应商ID重复。我很难弄清楚如何重复观察。例如,A公司可能会出现在2张以上的发票中,因此我们需要国家/地区填充每个发票,但是合并它只会在一个填充中。其余的将是Nan。谁能帮忙?

数据示例:

d1 = {'company id': [11, 12, 11, 11, 13, 12, 14], 
     'company': ["Company A", "Company B", "Company A", "Company A", "Company C", "Company B", "Company D"], 
    'USD': [120000, 20000, 4000000, 99000, 8000, 110000, 443000], 'Invoice no': [1, 2, 3, 4, 5, 6, 7]} 
invoices = pd.DataFrame(data=d1)
d2 = {'company id': [11, 12, 13, 14], 
     'company': ["Company A", "Company B", "Company C", "Company D"], 
    'Country': ["USA", "USA", "AUS", "MEX"]} 
supplier = pd.DataFrame(data=d2)

使用pd.Series使用map

invoices['Country'] = invoices['company id'].map(supplier.set_index('company id')['Country'])
invoices

输出:

   company id    company      USD  Invoice no Country
0          11  Company A   120000           1     USA
1          12  Company B    20000           2     USA
2          11  Company A  4000000           3     USA
3          11  Company A    99000           4     USA
4          13  Company C     8000           5     AUS
5          12  Company B   110000           6     USA
6          14  Company D   443000           7     MEX

详细信息,首先创建一个系列,将公司ID映射到索引和国家/地区的公司ID作为PD的价值。然后,使用pd.series.map将发票数据框中的公司ID的每个值都提供给定义的pd.Series提供的国家。

不确定您从哪里获得NaN,但合并对我有用。

merged = pd.merge(invoices, supplier, on=['company id', 'company'], how='left')
print(merged)
   company id    company      USD  Invoice no Country
0          11  Company A   120000           1     USA
1          12  Company B    20000           2     USA
2          11  Company A  4000000           3     USA
3          11  Company A    99000           4     USA
4          13  Company C     8000           5     AUS
5          12  Company B   110000           6     USA
6          14  Company D   443000           7     MEX

相关内容

  • 没有找到相关文章

最新更新