我有一個如下所示的資料框“df1”:
| 公司編號 | 公司名稱 | 交易_1 | 交易年_1 | 交易_2 | 交易年_2 |
|---|---|---|---|---|---|
| C1 | 美國廣播公司 | ||||
| C2 | 國防軍 |
我想用另一個資料框“df2”中的資料填充空白單元格,如下所示:
| 交易編號 | 交易年 | 公司編號 | 公司名稱 |
|---|---|---|---|
| D1 | 2010 | C1 | 美國廣播公司 |
| D2 | 2015 | C1 | 美國廣播公司 |
| D3 | 2012 | C2 | 國防軍 |
| D4 | 2017 | C2 | 國防軍 |
所以“df1”的最終結果應該如下:
| 公司編號 | 公司名稱 | 交易_1 | 交易年_1 | 交易_2 | 交易年_2 |
|---|---|---|---|---|---|
| C1 | 美國廣播公司 | D1 | 2010 | D2 | 2015 |
| C2 | 國防軍 | D3 | 2012 | D4 | 2017 |
誰能幫我解決這個問題?
謝謝!
uj5u.com熱心網友回復:
您可以使用:
df3 = (df2.drop(columns='company name')
.assign(col=df2.groupby('company name').cumcount().add(1).astype(str))
.pivot(index='company id', columns='col')
)
df3.columns = df3.columns.map('_'.join)
out = df1[['company id', 'company name']].merge(df3, on='company id')
輸出:
company id company name deal id_1 deal id_2 deal year_1 deal year_2
0 C1 ABC D1 D2 2010 2015
1 C2 DEF D3 D4 2012 2017
uj5u.com熱心網友回復:
用于計數器,通過排序第二級byGroupBy.cumcount旋轉 by ,最后 flatten :DataFrame.pivotMultiIndexDataFrame.sort_indexMultiIndex
df3 = (df2.assign(g = df2.groupby(['company id','company name']).cumcount())
.pivot(index=['company id','company name'], columns='g')
.sort_index(axis=1, level=1))
df3.columns = df3.columns.map(lambda x: f'{x[0]}_{x[1] 1}')
print (df3.reset_index())
company id company name deal id_1 deal year_1 deal id_2 deal year_2
0 C1 ABC D1 2010 D2 2015
1 C2 DEF D3 2012 D4 2017
與首次使用合并df:
df = df1[['company id', 'company name']].join(df3, on=['company id', 'company name'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482553.html
上一篇:沒有唯一識別符號的內連接
