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

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

合并兩個具有相同列和不同列的 Pandas DataFrame

合并兩個具有相同列和不同列的 Pandas DataFrame

小怪獸愛吃肉 2023-05-16 14:47:57
我有兩個數據幀,我想在 CCOL 列上合并:我給出了一個簡短的示例,如下所示:(相同名稱的 Cols 在兩個數據幀中具有相同的數據) df1 =     CCOL     ColA    ColB   ColC   ColD     ColE     ColF     A        1.0     a      b      23       45       2.7     B        3.0     c      q      26       34       5.9     C        5.0     f      r      2        4.9      15.9     D        7.0     e      s      45       2         8 df2 =     CCOL     ColA    ColB   ColE   ColP    ColR     ColS      A      1.0     a       45     vq      4       21.7      AF     7.0     za     7.9     r       4       3.1      D      7.0     e       2      gh      3       53.1      GK     8.0     ut     2       qt      4      33.3所以我正在尋找的這兩個數據幀的最終輸出是這樣的:  final_df =         CCOL  ColA ColB ColC ColD ColE ColF ColP ColR ColS         A     1.0   a    b    23   45   2.7  vq   4   21.7     D     7.0   e    s    45   2     8   gh   3   53.1我試過    newdf = pd.merge(df1,df2,on='CCOL', how='inner')但是,這個在新的 df 中從相同的列創建了 ColA_x、ColA_y 等,我不需要這些。我的嘗試:   newdf = df1.combine_first(df2)但是,這個創建了一個如下所示的數據框,它為具有 CCOL、“A”和“D”的行提供了正確的數據,但對于 df1 和 df2 在 CCOL 上不匹配的列則完全錯誤。     newdf =             CCOL  ColA ColB ColC ColD ColE ColF ColP ColR ColS       A    1.0    a    b   23  45.0  2.7   vq  4.0 21.7       B    3.0    c    q   26  34.0  5.9    r  4.0 3.1       C    5.0    f    r   2   4.9   15.9  gh  3.0 53.1       D    7.0    e    s   45  2.0   8.0   qt  4.0 33.3所以不明白如何實現我的輸出 final_df。任何幫助將不勝感激。
查看完整描述

2 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

差不多了,只需使用how參數 as'left'并添加dropna:


df1.merge(df2,how='left').dropna()

輸出:


  CCOL  ColA ColB ColC  ColD  ColE  ColF ColP  ColR  ColS

0    A   1.0    a    b    23  45.0   2.7   vq   4.0  21.7

3    D   7.0    e    s    45   2.0   8.0   gh   3.0  53.1


查看完整回答
反對 回復 2023-05-16
?
搖曳的薔薇

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

好吧,我假設你想在 df1 和 df2 的列上擴展你的結果 df,基于一個特定列(存在于 df1 和 df2 中)的值,這將標識你想要擴展的行。


所以沒有合并,而是在不同的軸上串聯,如下面的示例所示:


df1 = pd.DataFrame({'num_legs': [2, 4, 8, 0],

? ? ? ? ? ? ? ? ? ?'num_wings': [2, 0, 0, 0],

? ? ? ? ? ? ? ? ? ?'num_specimen_seen': [10, 2, 1, 8]},

? ? ? ? ? ? ? ? ? index=['falcon', 'dog', 'spider', 'fish'])

? ? ? ? num_legs? num_wings? num_specimen_seen

falcon? ? ? ? ?2? ? ? ? ? 2? ? ? ? ? ? ? ? ?10

dog? ? ? ? ? ? 4? ? ? ? ? 0? ? ? ? ? ? ? ? ? 2

spider? ? ? ? ?8? ? ? ? ? 0? ? ? ? ? ? ? ? ? 1

fish? ? ? ? ? ?0? ? ? ? ? 0? ? ? ? ? ? ? ? ? 8

df2 = pd.DataFrame({'num_legs2': [2, 4, 3, 0],

? ? ? ? ? ? ? ? ? ?'num_wings2': [2, 7, 77, 777],

? ? ? ? ? ? ? ? ? ?'num_specimen_seen2': [10, 2, 1, 8]},

? ? ? ? ? ? ? ? ? index=['falcon', 'dog', 'spider', 'fish'])

? ? ? ? num_legs2? num_wings2? num_specimen_seen2

falcon? ? ? ? ? 2? ? ? ? ? ?2? ? ? ? ? ? ? ? ? 10

dog? ? ? ? ? ? ?4? ? ? ? ? ?7? ? ? ? ? ? ? ? ? ?2

spider? ? ? ? ? 3? ? ? ? ? 77? ? ? ? ? ? ? ? ? ?1

fish? ? ? ? ? ? 0? ? ? ? ?777? ? ? ? ? ? ? ? ? ?8

newdf = pd.concat([df1.num_legs.loc[df1.num_legs == df2.num_legs2],

? ? ? ? ? ? ? ? ? ?df1.num_wings, df2.num_wings2],

? ? ? ? ? ? ? ? ? ?axis=1)

print(newdf)


? ? ? ? num_legs? num_wings? num_wings2

falcon? ? ? ?2.0? ? ? ? ? 2? ? ? ? ? ?2

dog? ? ? ? ? 4.0? ? ? ? ? 0? ? ? ? ? ?7

fish? ? ? ? ?0.0? ? ? ? ? 0? ? ? ? ?777

spider? ? ? ?NaN? ? ? ? ? 0? ? ? ? ? 77


排除一行,其中 num_legs != num_legs2。我想連接的其余列在連接方法中提供

我的結果中仍然有 nans。添加這個

newdf?=?newdf[newdf2['num_legs'].notna()]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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