簡體   English   中英

根據 python 中的另一個 dataframe 更改 dataframe

[英]changing a dataframe based on another dataframe in python

假設我們有一個 dataframe df1[1000,7] 和另一個 dataframe df2[300,6]。
我正在樹立一個例子來理解我的問題。

df1:  
 col1    col2      col3           ...     col8     newcol
 alex    george    whatever       ...     maria    nan
 julia   bill      sea            ...     paul     nan
 ...     ...        ...           ...     ...      nan
 chris   paul      micheal        ...     alex     nan

我的 df2 是 df 的子集,例如以下內容:

df2:
 col1    col2      col3           ...     col8     
 alex    george    whatever       ...     maria    
 chris   paul      micheal        ...     alex     

我希望我的 df 中的新列根據我的 df2 中是否存在該行來獲取特定值。 例如,如果行存在,我想在這里寫“ok”,如果不存在,則寫“missing”。 因此我的 df 應該變成

df1:  
 col1    col2      col3           ...     col8     newcol
 alex    george    whatever       ...     maria    ok
 julia   bill      sea            ...     paul     missing
 ...     ...        ...           ...     ...      ...
 chris   paul      micheal        ...     alex     ok

如何在不使用 python 中的 for 循環的情況下使用一個命令來做到這一點? 在我插入 df 中存在的行的值后,我曾想過使用 fill.na 命令來編寫“缺失”,但是我對如何填充存在於 df 中的行的值的語法有點困惑df2

編輯:我注意到我在 df2 中意外插入了 newcol。 那里不存在

我將簡單地合並(盡管從技術上講,您沒有合並額外的列)使用左側作為“主要”數據框的 2 個數據框。 但是,如果您包含該指標,它將創建一個列,告訴您這些行是否在兩個數據框中。 所以在這里,顯然如果你看到"both" ,它是 "ok" 和"left_only" ,它是 "missing"。

import pandas as pd
import numpy as np

df1 = pd.DataFrame([
    ['alex','george','maria'],
    ['julia','bill','paul'],
    ['chris','paul','alex']
    ], columns = ['col1','col2', 'col3'])


df2 = pd.DataFrame([
    ['alex','george','maria'],
    ['chris','paul','alex']
    ], columns = ['col1','col2', 'col3'])


merged = df1.merge(df2, how='left', on=list(df1.columns), indicator=True)
df1['newcol'] = np.where(merged['_merge'] == 'both', 'ok', 'missing')

Output:

print(merged)
    col1    col2   col3     _merge
0   alex  george  maria       both
1  julia    bill   paul  left_only
2  chris    paul   alex       both

並使用df1的新列:

print(df1)
    col1    col2   col3   newcol
0   alex  george  maria       ok
1  julia    bill   paul  missing
2  chris    paul   alex       ok

你可能想試試這個 -

n_columns = len(df1.columns)
df1["newcol"] = (df1 == df2).apply(sum, axis=1).apply(lambda x: "ok" if x == n_columns else "missing")
df1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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