我有 2 個資料框示例,名稱已更改:
df1=
| Comp_code | 部門串列A | 部門串列B |
|---|---|---|
| 代碼_1 | “部門一” | “三部” |
| 代碼_2 | “二部” | “四部門” |
| 代碼_3 | “第四部、第五部” | “部門一” |
| 代碼_4 | “1 部、5 部、6 部” | 《3 部、4 部》 |
df2= 只有部門和收入
| 部門串列 | 收入 | 毛利率 |
|---|---|---|
| “部門一” | 1000 | 500 |
| “二部” | 2000 | 0 |
| “三部, | 5000 | 900 |
| “四部門” | 5000 | 200 |
| “五部” | 7000 | -100 |
| “六部” | 8000 | 2500 |
我希望我的最終 df 有公司代碼、總收入和毛利率。總結 A 列和 B 列中的部門總數。 由于逗號分隔的部門字串,我無法迭代和加入。我最終的 DF 應該是這樣的
預期 df =
| Comp_code | 總轉速 | 總保證金 |
|---|---|---|
| 代碼_1 | 6000 | 1400 |
| 代碼_2 | 7000 | 200 |
| 代碼_3 | 13000 | 600 |
| 代碼_4 | 26000 | 4000 |
此外,資料框都是幾百萬行,一些部門串列(逗號分隔值)的數量約為 100。如果有一種高效的方式來做到這一點,那就太好了。
uj5u.com熱心網友回復:
此代碼有效。它很長,但主要是重復的。
new_df = df1[['Comp_code']].copy()
new_df['GrossRev'] = df1['DepartmentListB'].str.split(',').explode().map(df2.set_index('DepartmentList')['Revenue']).groupby(level=0).sum() df1['DepartmentListA'].str.split(',').explode().map(df2.set_index('DepartmentList')['Revenue']).groupby(level=0).sum()
new_df['Tot Margin'] = df1['DepartmentListB'].str.split(',').explode().map(df2.set_index('DepartmentList')['GrossMargin']).groupby(level=0).sum() df1['DepartmentListA'].str.split(',').explode().map(df2.set_index('DepartmentList')['GrossMargin']).groupby(level=0).sum()
輸出:
>>> new_df
Comp_code GrossRev Tot Margin
0 Code_1 6000 1400
1 Code_2 7000 200
2 Code_3 13000 600
3 Code_4 26000 4000
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/428062.html
上一篇:無法在函式中列印英寸和英尺符號
