簡體   English   中英

將 pandas 中的 2 個數據幀與一列中的用戶定義值合並

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM