我有2个数据帧。在
df1:
index ID City Region 2City
1 23 Moscow Msk
2 34 Obninsk Msk Msk
3 56 Spb
4 17 Tula Spb
df2:
^{pr2}$我想得到以下数据:
index ID City Region 2City Office
1 23 Moscow Msk Msk
2 34 Obninsk Msk Msk Msk
3 56 Spb Spb
4 17 Tula Spb Msk
因此它检查df2中的'office'
与df1中的'City'
、'Region'
、'2City'
匹配。在
另外,如果我找到'office'
作为'City'
,我就会停止搜索。所以'City'
列有优先权,然后是'Region'
,然后是{
我知道如何用3for
来实现这一点,但我希望有更好的选择。在
通常在Pandas中使用
join
(默认为左连接)或merge
(其中必须指定how='left'
)。在在您的例子中,您尝试查找基于三列的值。一种方法是使用
or
获取第一个非空值。在您可以用^{} 合并这两个数据帧,但据我所知,您实际上希望在})。在
df1
中的不同列上合并。一种可能的方法是添加一个额外的列,该列的值为'City'
(如果可用)(否则是'region'
或{您不需要指定两个数据帧中是否缺少值。如果是这样,您可以使用
how
参数控制它们的处理pd.merge
。在此时,名为“output”的
^{pr2}$pandas.DataFrame
将包含一个名为“Office”的列,该列的索引与df1相匹配。你可以这样做:这将为您提供所请求的数据帧以及附加列“Join”,您可以通过以下方式删除:
这里的OP基本上想做三个单独的合并——在
df1
中的“City”、“Region”和“2City”列中的每一个合并。因此,在没有体操的情况下使用基本的pandas.DataFrame
操作是不容易做到的。我只是在列表理解中隐藏了for循环,但它仍然存在。在相关问题 更多 >
编程相关推荐