我有两个数据框,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上NaNsid值,

以及zm23df2的另一行

最佳答案

你为什么要这样做?我认为您无法一次完成此操作。如果您使用“正确”,则会从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'])


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

关于python - Pandas 合并具有南值的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51946412/

10-09 20:24
查看更多