Python 自定义比较以在比较后创建新的数据帧
我正在尝试基于与2个数据帧的比较创建一个新的熊猫数据帧 我在这里寻找了相似的答案,但我没有得到我想要的结果 我有两个数据帧:Python 自定义比较以在比较后创建新的数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试基于与2个数据帧的比较创建一个新的熊猫数据帧 我在这里寻找了相似的答案,但我没有得到我想要的结果 我有两个数据帧: totalDistrict = dataFrameDemography[['district_name', 'population_density']] districtsWithRecyclingAreas = dataFrameRecyclingAreas['DISTRICT'] 我使用Pandas从2个不同的CSV文件中提取我想要的列。各表如下:
totalDistrict = dataFrameDemography[['district_name', 'population_density']]
districtsWithRecyclingAreas = dataFrameRecyclingAreas['DISTRICT']
我使用Pandas从2个不同的CSV文件中提取我想要的列。各表如下:
district_name population_density
0 Centro 25340.69
1 Arganzuela 23306.44
2 Retiro 21867.53
3 Salamanca 26830.78
4 Chamartín 15723.25
5 Tetuan 28664.25
6 Chamberí 29049.26
7 Fuencarral-El Pardo 1003.00
8 Moncloa-Aravaca 2515.26
9 Latina 9183.75
10 Carabanchel 17316.88
11 Usera 17535.32
12 Puente de Vallecas 15345.01
13 Moratalaz 15493.59
14 Ciudad Lineal 18455.56
15 Hortaleza 6973.33
16 Villaverde 7059.13
17 Villa de Vallecas 2026.82
18 Vicálvaro 1981.11
19 San Blas-Canillejas 6934.37
20 Barajas 1076.06
现在,我想做的是生成一个包含所有地区及其人口密度的数据框,并用一个额外的列指示他们是否有回收区(1或0值f.e)
我只是不知道怎么做,因为每个数据帧中的列名称都不同,第二个区域也是用大写字母写的。让我们使用
.str.upper
将地区名称
列转换为大写,然后使用系列.isin
查找地区名称
中的元素,这些元素也存在于系列地区回收区
:
totalDistrict['recycling'] = totalDistrict['district_name'].str.upper()\
.isin(districtsWithRecyclingAreas).view('i1')
@JavierAlonsoDelgado无需担心..您可以安全地忽略该警告..可能您使用的是旧的pandas版本。当我打印结果时,所有条目都有0个回收区。答案是否对您提供的样本数据有效?我使用的是主帖子中提供的数据,但是没有得到你在回答中提供的结果对我来说,它在样本数据上工作正常。顺便问一下,你的熊猫版本是什么?
totalDistrict['recycling'] = totalDistrict['district_name'].str.upper()\
.isin(districtsWithRecyclingAreas).view('i1')
district_name population_density recycling
0 Centro 25340.69 0
1 Arganzuela 23306.44 1
2 Retiro 21867.53 0
3 Salamanca 26830.78 0
4 Chamartín 15723.25 0
5 Tetuan 28664.25 0
6 Chamberí 29049.26 0
7 Fuencarral-El Pardo 1003.00 1
8 Moncloa-Aravaca 2515.26 1
9 Latina 9183.75 1
10 Carabanchel 17316.88 1
11 Usera 17535.32 1
12 Puente de Vallecas 15345.01 1
13 Moratalaz 15493.59 1
14 Ciudad Lineal 18455.56 1
15 Hortaleza 6973.33 1
16 Villaverde 7059.13 1
17 Villa de Vallecas 2026.82 1
18 Vicálvaro 1981.11 0
19 San Blas-Canillejas 6934.37 1
20 Barajas 1076.06 1