代码之家  ›  专栏  ›  技术社区  ›  Van Peer

熊猫将列与NaN值合并

  •  2
  • Van Peer  · 技术社区  · 7 年前

    我有两个数据帧, df1 df2

    df1
      skuid brand
    0  ax12     C
    1  zm23     F
    2  zm23   NaN
    3  zm24   NaN
    
    df2
        sid brand
    0  ax11     G
    1  ax12     C
    2  zm23     F
    3  zm23   NaN
    

    我需要根据 skuid sid .

    df1.merge(df2, how='right')
      skuid brand   sid
    0  ax12     C  ax12
    1  zm23     F  zm23
    2  zm23   NaN  zm23
    3  zm24   NaN  zm23
    4   NaN     G  ax11
    

    我如何获得如下所示的输出?

      skuid brand   sid
    0  ax12     C  ax12
    1  zm23     F  zm23
    2  zm23   NaN   NaN
    3  zm24   NaN   NaN
    4   NaN   NaN  zm23
    5   NaN     G  ax11
    

    NaN 价值观 希德 在ID 2和3行,

    还有一排 zm23 在里面 DF2

    1 回复  |  直到 7 年前
        1
  •  1
  •   Anna Iliukovich-Strakovskaia    7 年前

    你为什么要这样做?我想你不能一次完成这个手术。如果您使用“right”,则会从df1中丢失“zm24”。如果您使用LEFT,则您将从DF2中丢失“ax11”。所以你需要使用“外部”,但它不会做你想要的。你将有原始的“ZM23NANZM23”,因为你合并了skuid和sid。它们在这种生吃上是一样的。你可以合并你的帧,然后再做另一个操作。 我认为你可以试着用“左开”和“右开”,但这不能解决你的问题。

    如果你在那里使用,你在3个原始文件中没有“sid”。

    df1.merge(df2, how='outer', left_on=['skuid', 'brand'], right_on=['sid', 'brand'])
    

    UPD: 我发现U.U的解决方案可以在合并前填充Nan的不同值。

    df1 = df1.fillna(0)
    df2 = df2.fillna(1)
    df = df1.merge(df2, how='outer', left_on=['skuid', 'brand'], right_on=['sid', 'brand'])
    

    如果你想,你可以把它们转换回去。