[英]merging 2 data frames in pandas with user defined values in one column
我們有 2 個數據框:
**df**
ASSET_KEY IS_PRESENT FEED_NAME
1
2
3
4
5
df1
ASSET_KEY FEED_NAME
1 XYZ
2 PQR
4 ABC
最初第一個數據幀的 IS_PRESENT 和 FEED_NAME 都是 null。
如果存在,我們需要使用 df1 的 FEED_NAME 填充 IS_PRESENT-> YES/NO 和 FEED_NAME。
預期 output:
df
ASSET_KEY IS_PRESENT FEED_NAME
1 YES XYZ
2 YES PQR
3 NO
4 YES ABC
5 NO
我嘗試合並但不確定如何填充 IS_PRESENT。 在 pandas 中實現這一目標的最佳方法是什么?
讓我們試試
out = df.merge(df1.assign(IS_PRESENT='Yes')).fillna({'IS_PRESENT' : 'No'})
import pandas as pd
### inputs ###############################################
# df to change
d1 = {"ASSET_KEY": [1, 2, 3, 4, 5],
"IS_PRESENT": ["", "", "", "", ""],
"FEED_NAME": ["", "", "", "", ""]}
df1 = pd.DataFrame(d1)
# df to ref
d2 = {"ASSET_KEY": [1, 2, 4],
"FEED_NAME": ["XYZ", "PQR", "ABC"]}
df2 = pd.DataFrame(d2)
### solution ##############################################
# 1. merge on left (df)
df3 = pd.merge(df1[["ASSET_KEY", "IS_PRESENT"]], df2, on="ASSET_KEY", how="left")
# 2. fill "IS_PRESENT"
df3.loc[df3["FEED_NAME"].isnull(), "IS_PRESENT"] = "NO"
df3.loc[df3["FEED_NAME"].notnull(), "IS_PRESENT"] = "YES"
# 3. fill NaNs with ""
df3.fillna('', inplace=True)
print(df3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.