关于 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)
我有一个与 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)