如何在公共列上的大熊猫中合并两个具有相似值(但不相同)的数据框?

时间:2020-11-10 23:23:26

标签: python pandas dataframe merge

我正在尝试将两个数据框以大熊猫的形式合并在一个显示该地理区域名称的公共列上。该列具有相似的值,但不相同。例如,一个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

是否有一种方法可以基于值的某种相似度来合并这两个数据帧,以便将LondonLondon / Greater London值视为相同的值?谢谢!

1 个答案:

答案 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,其中包含重叠的AreaCity的索引。我使用np.where()检查每个list comprehension是否存在City的列表in并保存索引。

注意:仅当Areas的{​​{1}}包含string Area时,此方法才有效。 (即City仅与string匹配,如果此London包含单词London / Greater London

代码:

area

结果

London