大熊猫合并具有南值的列

时间:2018-08-21 10:13:52

标签: python pandas dataframe

我有两个数据帧,df1df2

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

我需要基于skuidsid的值组合两个数据帧。

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
列ID 2和3上的NaN

sid

以及zm23df2的另一行

1 个答案:

答案 0 :(得分:1)

您为什么要这样做?我认为您无法一次完成此操作。如果您使用“正确”,则会从df1中丢失“ zm24”。如果您使用left,那么您将从df2中丢失“ ax11”。因此,您需要使用“外部”,但不会执行您想要的操作。 U将具有原始的'zm23 NaN zm23',因为您通过skuid和sid合并。它们在原始方面是相同的。 U可以合并您的框架,然后进行其他操作。 而且我认为您可以尝试使用“ left_on”和“ right_on”,但这无法解决您的问题。

如果您在那里使用,则3个原始字符中就没有'sid'。

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

UPD::我找到了您的解决方案。在合并之前,U可以为nans填充不同的值。

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

如果您愿意,可以将它们转换回去。