我有两个数据帧,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
列ID 2和3上的NaN
的 sid
值
以及zm23
中df2
的另一行
答案 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'])
如果您愿意,可以将它们转换回去。