我有两个数据帧:data_df
和geo_dimension_df
。你知道吗
我想获取geo_dimension_df
的索引,我将其重命名为id
,并使其成为data_df
上名为geo_id
的列。你知道吗
我将把这两个数据帧作为表插入到数据库中,id
列将是它们的主键,geo_id
是将data_df
链接到geo_dimension_df
的外键。你知道吗
可以看出,cbsa
和name
值可以随时间变化。(加利福尼亚州尤巴市->;加利福尼亚州马里斯维尔市尤巴市)。因此,geo_dimension_df
是cbsa
和name
的唯一组合。你知道吗
我需要比较两个数据帧上的cbsa
和name
值,然后在匹配时将geo_dimension_df.id
设置为data_df.geo_id
值。你知道吗
我试过用merge
一段时间,但是弄糊涂了,所以现在我试着用apply
把它看作是一个跨多个列值的Excel vlookup,但是运气不好。下面是我的尝试,但有点胡说八道。。。你知道吗
data_df['geo_id'] = data_df[['cbsa', 'name']]
.apply(
lambda x, y:
geo_dimension_df
.index[geo_dimension_df[['cbsa', 'name]]
.to_list()
== [x,y])
下面是两个原始数据帧,后跟所需的结果。非常感谢。你知道吗
地理尺寸:
cbsa name
id
1 10180 Abilene, TX
2 10420 Akron, OH
3 10500 Albany, GA
4 10540 Albany, OR
5 10540 Albany-Lebanon, OR
...
519 49620 York-Hanover, PA
520 49660 Youngstown-Warren-Boardman, OH-PA
521 49700 Yuba City, CA
522 49700 Yuba City-Marysville, CA
523 49740 Yuma, AZ
数据类型:
cbsa name month year units_total
id
1 10180 Abilene, TX 1 2004 22
2 10180 Abilene, TX 2 2004 12
3 10180 Abilene, TX 3 2004 44
4 10180 Abilene, TX 4 2004 32
5 10180 Abilene, TX 5 2004 21
...
67145 49740 Yuma, AZ 12 2018 68
67146 49740 Yuma, AZ 1 2019 86
67147 49740 Yuma, AZ 2 2019 99
67148 49740 Yuma, AZ 3 2019 99
67149 49740 Yuma, AZ 4 2019 94
预期结果:
数据\u df(添加了geo \u id外键列):
cbsa name month year units_total geo_id
id
1 10180 Abilene, TX 1 2004 22 1
2 10180 Abilene, TX 2 2004 12 1
3 10180 Abilene, TX 3 2004 44 1
4 10180 Abilene, TX 4 2004 32 1
5 10180 Abilene, TX 5 2004 21 1
...
67145 49740 Yuma, AZ 12 2018 68 523
67146 49740 Yuma, AZ 1 2019 86 523
67147 49740 Yuma, AZ 2 2019 99 523
67148 49740 Yuma, AZ 3 2019 99 523
67149 49740 Yuma, AZ 4 2019 94 523
注意:在此之后,我将从data_df
删除cbsa
和name
,以防有人好奇我为什么要复制数据。你知道吗
首先,因为索引不是正确的列,所以将其设为列,以便在以后的
merge
中使用:接下来,加入
data_df
和geo_dimension_df
最后,删除添加到
geo_dimension_df
开头的列:完成此操作后,
geo_dimension_df
的索引列id
现在将出现在data_df
列geo_id
下:数据类型:
相关问题 更多 >
编程相关推荐