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