我正在尝试将两个数据框以大熊猫的形式合并在一个显示该地理区域名称的公共列上。该列具有相似的值,但不相同。例如,一个DataFrame中的值是London
,而另一个是London / Greater London
-它们被视为不同的值,但合并时应视为相同的值。
In[1]:
import pandas as pd
df1 = pd.DataFrame([['London', 2], ['Bristol', 3], ['Liverpool', 6]], columns=['Area', 'B'])
df2 = pd.DataFrame([['London / Greater London', 7], ['Bristol_', 9], ['Liverpool / Liverpool', 1]], columns=['Area', 'B'])
df_merged = pd.merge(df1, df2, on="Area", indicator=True, how='outer')
df_merged
Out[1]:
Area B_x B_y _merge
0 London 2.0 NaN left_only
1 Bristol 3.0 NaN left_only
2 Liverpool 6.0 NaN left_only
3 London / Greater London NaN 7.0 right_only
4 Bristol_ NaN 9.0 right_only
5 Liverpool / Liverpool NaN 1.0 right_only
理想的输出如下所示:
Out[1]:
Area B_x B_y _merge
0 London 2.0 7.0 both
1 Bristol 3.0 9.0 both
2 Liverpool 6.0 1.0 both
是否有一种方法可以基于值的某种相似度来合并这两个数据帧,以便将London
和London / Greater London
值视为相同的值?谢谢!
答案 0 :(得分:0)
您可以首先使用struct Country: BinraySearchable {
var code: String
var name: String
var searchable: String { name }
}
// Suppose you have a list of countries sorted by `name`, you want to find
// the index of the first country whose name starts with "United", others
// will follow:
let index = listOfCountries.binarySearch("United")
创建两个arrays
,其中包含重叠的Area
和City
的索引。我使用np.where()
检查每个list comprehension
是否存在City
的列表in
并保存索引。
注意:仅当Areas
的{{1}}包含string
Area
时,此方法才有效。 (即City
仅与string
匹配,如果此London
包含单词London / Greater London
。
代码:
area
结果
London