我有一個關于熊貓的問題。
在 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)
我附上代碼。有什么建議嗎?
先感謝您。
uj5u.com熱心網友回復:
您可以與展開的列合并 并在分組時使用以獲取所需的列:df1df2 id_vendorsDataFrame.GroupBy.aggsales
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]
筆記:
在您的示例中,id_vendorsindf2由字串串列填充,但由于id_vendorindf1是整數型別,我認為這是一個錯字。如果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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/479710.html
上一篇:使用剪輯設定熊貓列的最小值
