亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

水平比較兩個數據框并插入空白行以查找差異

水平比較兩個數據框并插入空白行以查找差異

狐的傳說 2023-05-23 10:05:42
水平比較兩個數據框并插入空白行以查找差異。我需要在沒有 id 值的第二個數據框中查看空白行df1 =user    id  AmountJohn    1   1000Tom     2   2000Tom     2   3000Claire  3   4000Mary    4   5000 df2 = user    id  AmountJohn    1   1000Tom     2   2000Claire  3   4000Mary    4   5000橫向比較我正在使用pd.concat([df1, df2],                     axis=1,Result=user    id  Amount      user    id  AmountJohn    1   1000        John    1   1000Tom     2   2000        Tom     2   2000Tom     2   3000        Claire  3   4000Claire  3   4000        Mary    4   5000Mary    4   5000                我期望發生的事情:user    id  Amount      user    id  AmountJohn    1   1000        John    1   1000Tom     2   2000        Tom     2   2000Tom     2   3000                Claire  3   4000        Claire  3   4000Mary    4   5000        Mary    4   5000
查看完整描述

2 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

您需要使用merge()來進行連接(使用列中的值)。此外,您需要rename()RHS 中的列并在right_on=參數中使用相同的名稱


df1 = pd.read_csv(io.StringIO("""user    id  Amount

John    1   1000

Tom     2   2000

Tom     2   3000

Claire  3   4000

Mary    4   5000"""), sep="\s\s+", engine="python")


df2 = pd.read_csv(io.StringIO("""user    id  Amount

John    1   1000

Tom     2   2000

Claire  3   4000

Mary    4   5000"""), sep="\s\s+", engine="python")


df2.rename(columns={c:f"{c}_right" for c in df2.columns})

dfm = df1.merge(df2.rename(columns={c:f"{c}_right" for c in df2.columns}), 

          left_on=[c for c in df1.columns], 

          right_on=[f"{c}_right" for c in df2.columns],

          how="left")


print(dfm.to_string(index=False))

輸出


   user  id  Amount user_right  id_right  Amount_right

   John   1    1000       John       1.0        1000.0

    Tom   2    2000        Tom       2.0        2000.0

    Tom   2    3000        NaN       NaN           NaN

 Claire   3    4000     Claire       3.0        4000.0

   Mary   4    5000       Mary       4.0        5000.0


查看完整回答
反對 回復 2023-05-23
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

這對我有用。


首先,我創建了一個數據框來查找重復的 ID


duplicate = df1[df1['id'].duplicated()] 

然后我查找了這個新的數據框以確定我需要哪些 ID 來插入一個空行


df2= df2.assign(result=df2['id'].isin(duplicate['id']).astype(int))

我創建了一個結果列來標識我需要插入空行的行


a = (df2['result'] == 1)

df3 = df2.copy() #make a copy because we want to be safe here

for i in df2.loc[a].index:

    empty_row = pd.DataFrame([], index=[i]) #creating the empty data

    j = i + 1 #just to get things easier to read

    df3 = pd.concat([df3.ix[:i], empty_row, df3.ix[j:]], sort=False) #slicing the df


df3 = df3.reset_index(drop=True,) #reset the index

在 df3 上插入空行后,我使用 pd.concat 并排顯示兩個 dfs


df_all =pd.concat([df1, df3], axis=1, sort=False)


查看完整回答
反對 回復 2023-05-23
  • 2 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號