我有兩個資料框,第一個帶有idandcnpj欄位,第二個帶有 just cnpj。這第二個資料幀可以在列中具有新值,cnpj因此我需要使用第一個資料幀中沒有的 cpfs 創建一個新資料幀,并在最大值之后為 id 添加 1。
我怎樣才能做到這一點?
資料框 1:
| ID | cnpj |
|---|---|
| 11 | 552030405560 |
| 12 | 709050358572 |
| 13 | 999680558533 |
| 14 | 585680558542 |
資料框 2:
| cnpj |
|---|
| 552030405560 |
| 709050358572 |
| 999680558533 |
| 585680558542 |
| 658540805552 |
| 498546543258 |
預期輸出:
| ID | cnpj |
|---|---|
| 11 | 552030405560 |
| 12 | 709050358572 |
| 13 | 999680558533 |
| 14 | 585680558542 |
| 15 | 658540805552 |
| 16 | 498546543258 |
uj5u.com熱心網友回復:
IIUC,您可以使用merge和填充自定義函式:
def fillmax(s):
MAX = s.max()
mask = s.isna()
return s.fillna(MAX mask.cumsum().where(mask, 0)).convert_dtypes()
out = (df1
.merge(df2, on='cnpj', how='right')
.assign(id=lambda d: fillmax(d['id']))
)
輸出:
01
id cnpj
0 11 552030405560
1 12 709050358572
2 13 999680558533
3 14 585680558542
4 15 658540805552
5 16 498546543258
uj5u.com熱心網友回復:
您可以進行合并并將其添加到索引中
df_final = pd.merge(df2, df1, how = 'left').reset_index()
df_final['index'] = df_final['index'].add(df_final.iloc[0]['id']).astype(int)
df_final
uj5u.com熱心網友回復:
您可以正確合并cnpj,然后根據需要填充空值:
merged = df1.merge(df2, how="right")
merged["id"] = merged["id"].where(merged["id"].notnull(), merged["id"].isnull().cumsum().add(merged["id"].max()))
>>> merged
id cnpj
0 11.0 552030405560
1 12.0 709050358572
2 13.0 999680558533
3 14.0 585680558542
4 15.0 658540805552
5 16.0 498546543258
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484930.html
上一篇:如何根據時間戳將多個JSON物件合并到PythonDataFrame中?
下一篇:清理網路抓取資料并組合在一起?
