Python 我可以使用df1中的一列和df2中的一个单元格中的任意一个值连接两个数据帧吗?

Python 我可以使用df1中的一列和df2中的一个单元格中的任意一个值连接两个数据帧吗?,python,pandas,join,Python,Pandas,Join,我正在处理一些地理空间数据,df_geo,我有一个CSV值,我想加入到位置数据框中,称为df_data 然而,我的问题是,有多种方法可以拼写我想要连接两个数据帧的列中的值(区域名称)。看看下面的加泰罗尼亚例子,在df_geo:根据语言的不同,有6种不同的拼写地区名称的方法 我的问题是:如果行在df_data中被命名为“Catalonia”,我将如何将df_data连接到df_geo?由于行对于一个区域是唯一的,您可以创建一个字典,将'VARNAME_1'中的任何名称映射到df_geo的索引 然

我正在处理一些地理空间数据,
df_geo
,我有一个CSV值,我想加入到位置数据框中,称为
df_data

然而,我的问题是,有多种方法可以拼写我想要连接两个数据帧的列中的值(区域名称)。看看下面的加泰罗尼亚例子,在
df_geo
:根据语言的不同,有6种不同的拼写地区名称的方法


我的问题是:如果行在
df_data
中被命名为“Catalonia”,我将如何将
df_data
连接到
df_geo

由于行对于一个区域是唯一的,您可以创建一个字典,将
'VARNAME_1'
中的任何名称映射到
df_geo
的索引

然后使用它将
df_data
中的名称映射到一个虚拟列,您可以对
df_geo
中的索引和
df_data
中的映射列进行简单合并

要获取词典,请执行以下操作:

d = dict((y,ids) for ids, val in df_geo.VARNAME_1.str.split(r'\\').items() 
                 for y in val)
样本数据: 密码 输出:
这本词典是如何工作的。
df\u geo.VARNAME\u 1.str.split(r'\')。values
VARNAME\u 1
中的字符串拆分到
'\'
字符上,并将所有分隔的值放置在一系列列表中。使用
系列
上的
.items
可以得到一个元组(我们将其解压为两个单独的值),第一个值是索引,与原始
数据帧
的索引相同,第二个项是

for ids, val in df_geo.VARNAME_1.str.split(r'\\').items():
    print(f'id:{ids} and val:{val}')
#id:0 and val:['Catalogna', 'Catalogne', 'Catalonia']
#id:1 and val:['A', 'B', 'C', 'D', 'E', 'F', 'G']
所以现在
val
是一个列表,我们再次希望遍历它来创建字典

for ids, val in df_geo.VARNAME_1.str.split(r'\\').items():
    for y in val:
        print(f'id:{ids} and y:{y}')
#id:0 and y:Catalogna
#id:0 and y:Catalogne
#id:0 and y:Catalonia
#id:1 and y:A
#id:1 and y:B
#id:1 and y:C
#id:1 and y:D
#id:1 and y:E
#id:1 and y:F
#id:1 and y:G

因此,我创建的字典是以y为键,原始数据框索引
ids
为值。

数据框中的每一行是否都是某个区域独有的?是的!
df_geo
df_data
中的每一行都代表单个区域的数据。这非常有效,谢谢!小编辑:也许在我的机器上,byt删除ID列只在使用
时有效。drop(['ID'],axis=1)
哦,是的,我相信这一定是熊猫的旧版本。嘿@ALollz,你介意更深入地描述一下字典的创建吗?我有点难以理解引擎盖下到底发生了什么。非常感谢!具体地说,我想我对ID号本身是如何生成的有点困惑(我想我理解如何扩展每行中的值,如果它们不是空的话,将它们添加到字典中)@scrollex我更新了答案。你是对的,索引可能只是幸运地保持不变。我将答案改为使用
.items
,它将实际返回
系列
的实际索引,而不是整数索引,而整数索引恰好是相同的。我还从
.str.split
中删除了
expand=True
,这样您就不必再检查
y是否为None了
看了看,现在好像情况不一样了
.items()
在一个系列上不起作用;当我尝试使用
.iteritems()
时,我创建的词典中有如下条目:
'Catalu\xc3\xb1a | Catalogna | catalone | Catalonia | Catalunha | Catalunya | Katalonien':68
        Name  Vals                      VARNAME_1
0  Catalogna     1  Catalogna\Catalogne\Catalonia
1      Seven     2                            NaN
2          E     3                  A\B\C\D\E\F\G
for ids, val in df_geo.VARNAME_1.str.split(r'\\').items():
    print(f'id:{ids} and val:{val}')
#id:0 and val:['Catalogna', 'Catalogne', 'Catalonia']
#id:1 and val:['A', 'B', 'C', 'D', 'E', 'F', 'G']
for ids, val in df_geo.VARNAME_1.str.split(r'\\').items():
    for y in val:
        print(f'id:{ids} and y:{y}')
#id:0 and y:Catalogna
#id:0 and y:Catalogne
#id:0 and y:Catalonia
#id:1 and y:A
#id:1 and y:B
#id:1 and y:C
#id:1 and y:D
#id:1 and y:E
#id:1 and y:F
#id:1 and y:G