gpt4 book ai didi

python - 关于 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-05 04:29:21 25 4
gpt4 key购买 nike

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

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

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

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

附言。在 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 df1df2exploded id_vendors 列并使用 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)

关于python - 关于 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72336472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com