簡體   English   中英

比較熊貓中不同大小的數據框並根據比較創建新列

[英]Comparing dataframes with different sizes in pandas and create new column based on comparison

我正在通過 pyodbc 2 數據幀導入:df1 和 df2。

它們很大,我需要比較它們。

PS:它們的尺寸不一樣。

3 列大小的數據框:

數據幀的大小和格式

我想做的事:

如果 CODUSU 列相等,則 df2[Situação] = 'K'

我做了什么,但它太慢了:

for i in range(0,len(df2)):
  for k in range(0,len(df1)):
    if df2.loc[i][0] == df1.loc[k][0]:
        df2[i]["Situação"] = "K"

我還需要:

如果在 df1[CODUSU] 中而不在 df2[CODUSU] 中,則 df2[Situação] = 'Q'

如果在 df2[CODUSU] 中而不是在 df1[CODUSU] 中,則 df2[Situação] = 'B'

您應該對數據框進行外部合並,要求提供指標變量:

resul = df2.merge(df1, how='outer', on='A', suffixes=('', '_y'),indicator=True)

不要忘記僅來自df1行的DTDOSE列:

resul.loc[resul['indicator'] == 'right_only', 'DTDOSE'] = resul.loc[
                                  resul['indicator'] == 'right_only', 'DTDOSE_y']

是時候計算Situação列的新值了:

resul.loc[resul['indicator'] == 'both', 'Situação'] = 'K'
resul.loc[resul['indicator'] == 'right_only', 'Situação'] = 'Q'
resul.loc[resul['indicator'] == 'left_only', 'Situação'] = 'B'

最后去掉輔助列:

resul = resul[['CODUSU', 'DTDOSE', 'Situação']

暫無
暫無

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

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