关于 Pandas 数据框

About Pandas Dataframe

我有一个与 Pandas 有关的问题。

在 df1 中,我有一个数据框,其中包含每个卖家的 ID 及其各自的名称。

在 df2 中,我有销售员的 ID 和他们各自的销售额。

我想在 df2 中添加两个新列,其中包含销售人员的名字和姓氏。

PS。在 df2 中,其中一项销售额由两家供应商共享。

import pandas as pd

vendors = {'first_name': ['Montgomery', 'Dagmar', 'Reeba', 'Shalom', 'Broddy', 'Aurelia'],
         'last_name': ['Humes', 'Elstow', 'Wattisham', 'Alen', 'Keningham', 'Brechin'],
         'id_vendor': [127, 241, 329, 333, 212, 233]}

sales = {'id_vendor': [['127'], ['241'], ['329, 333'], ['212'], ['233']],
         'sales': [1233, 25000, 8555, 4333, 3222]}

df1 = pd.DataFrame(vendors)
df2 = pd.DataFrame(sales)

我附上代码。有什么建议吗?`

提前谢谢你。

您可以 merge df1 with df2 with the exploded id_vendors column and use DataFrame.GroupBy.agg 在按 sales 分组时根据需要获取列:

transform_names = lambda x: ', '.join(list(x))

res = (df1.merge(df2.explode('id_vendor')).
       groupby('sales').
       agg({'first_name': transform_names, 'last_name': transform_names, 
            'id_vendor': list})
      )

print(res)
          first_name        last_name   id_vendor
sales                                            
1233      Montgomery            Humes       [127]
3222         Aurelia          Brechin       [233]
4333          Broddy        Keningham       [212]
8555   Reeba, Shalom  Wattisham, Alen  [329, 333]
25000         Dagmar           Elstow       [241]

注:

在您的示例中,df2 中的 id_vendors 由字符串列表填充,但由于 df1 中的 id_vendor 是整数类型,我认为它是错别字。如果 id_vendors 确实包含字符串列表,您还需要将字符串转换为整数:

transform_names = lambda x: ', '.join(list(x))

# Notice the .astype(int) call.
res = (df1.merge(df2.explode('id_vendor').astype(int)).
       groupby('sales').
       agg({'first_name': transform_names, 'last_name': transform_names, 
            'id_vendor': list})
      )

print(res)