我有兩個資料框,我想基于im_id. 但是,對于im_df我要保留一切dd_df并沒有添加什么dd_df有im_df沒有。
基本上,如果im_df有 1、2、3 和 6,并且dd_df有 1、2 和 5,我希望總數為 1、2、3、5 和 6 - 1 和 2 取自im_df(應該相同就像里面的東西一樣dd_df)。
到目前為止我已經嘗試過這個:
df = im_df.merge(dd_df, on=["im_id"], suffixes=("", "_DROP"))
df = df.filter(regex="^(?!.*_DROP)")
df = df.drop(
columns=[
"some_col_from_im_df_we_dont_need",
"and_another",
]
)
df = df.drop_duplicates(subset="im_id")
這似乎不起作用,因為df最終有大約 560k 行。im_df最初有 1.5m 行,dd_df大約有 570k。
有誰知道我可能做錯了什么?
例如,一個資料幀 (x) 具有以下內容:
f_id | im_id | re_id | ip_id
1 1 3 4
2 5 1 3
另一個資料幀 (y) 有
f_id | im_id | evo
1 1 "hello"
2 5 "yo"
3 4 "boo"
我希望結果表是
f_id | im_id | re_id | ip_id | evo
1 1 3 4 "hello"
2 5 1 3 "yo"
uj5u.com熱心網友回復:
我認為你應該合并 f_id 和 im_id 并使用left屬性:
pd.merge(x, y, on=["f_id", "im_id"], how="left")
有了這個,您可以復制您的示例輸出
f_id im_id re_id ip_id evo
0 1 1 3 4 "hello"
1 2 5 1 3 "yo"
uj5u.com熱心網友回復:
我認為你想要的是合并和追加。如果我對你的理解是正確的,那么當 im_df 中不存在新行時,你只想從 dd_df 添加新行。假設兩個資料幀具有相同的列(如果它們沒有相同的列,則對具有相同列的 dd_df 子集執行以下操作,除非您想要添加新列)
df_temp = im_df.merge(dd_df, how='inner', on='im_id')
df_new = im_df.append(dd_df[~dd_df.index.isin(df_temp)])
這將追加 dd_df 中不在 im_df 中的所有行。
您可能也可以不制作 df_temp (尚未測驗以下內容,但請嘗試一下)
df_new = im_df.append(dd_df[~dd_df.im_id.isin(im_df.im_id)])
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/358443.html
上一篇:計算缺失列id的串列
