简单地说,我试图通过比较air_id
和{latitude
和{df2
的数据框中:
将latitude
和{df2
的技巧取决于如何对{
df2.air_id
和{df2.hpg_id
和{[df2.air_id, df2.hpg_id]
和{考虑到这一点,预期结果应该是:
请注意df1
中的ignore_me
列是如何被排除在结果数据帧之外的。在
以下是设置数据帧的代码:
data = { 'air_id' : [ 'air1', '', 'air3', 'air4', 'air2', 'air1' ],
'hpg_id' : [ 'hpg1', 'hpg2', '', 'hpg4', '', '' ],
'latitude' : [ 101.1, 102.2, 103, 104, 102, 101.1, ],
'longitude' : [ 51, 52, 53, 54, 52, 51, ],
'ignore_me' : [ 91, 92, 93, 94, 95, 96 ] }
df1 = pd.DataFrame(data)
display(df1)
data2 = { 'air_id' : [ '', 'air2', 'air3', 'air1' ],
'hpg_id' : [ 'hpg1', 'hpg2', '', '' ] }
df2 = pd.DataFrame(data2)
display(df2)
不幸的是,我无法将merge()
用于此任务。我当前的结果是一个DataFrame,其中来自df1
的所有列都填充了NaNs:
如何使用上述规则从df1
复制这些特定列?在
用电视台和数字广播来处理资料的匹配。。。撒上仙尘
详细信息
^{pr2}$s2
看起来像这样和
s1
关键是我们想找出该行中的任何内容是否与另一个数据帧中的行中的任何其他内容匹配。现在我可以使用广播和
&
但是在布尔上下文中,空集的值为
False
,因此现在我可以使用
np.where
来显示这些True
在哪里它们分别是}中的行。但是我不需要两行
df2
和{1
,所以我创建了一个大小合适的空数组,期望覆盖1
行。我用df1
中的lat和lon填充这些值然后我用
pd.DataFrame
将其包装起来,并按上面所示进行连接。在这是一种没有合并的手动方式。它不是有效的,但是如果它对您的用例有足够的性能,那么它可能是可管理的。在
这里有一种方法可以让你完成你想做的事情。在
首先使用
merge()
两次。首先在air_id
上,然后在hpg_id
上。对于这两种情况,当键是空字符串时,忽略小的情况。在但是,这会为所需的列创建重复项。(每次调用merge时,我都会删除另一个join键,以避免这些调用出现重复的列名。)
我们可以通过采用this post上描述的方法之一来合并这些值。在
^{pr2}$更新
在合并产生重复项的情况下,可以使用^{} 。在
相关问题 更多 >
编程相关推荐