比较两个数据帧的部分行相等,并将相等的行输出到新的数据帧中?

2024-09-28 18:59:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个现有的数据帧,我将其命名为death和air:

County,Death Rate
Autauga,859
Baldwin,976

County,AQI
Baldwin,51
Clay,45

这些数据集来自不同的来源,具有不同的长度,相同的县不会出现在每个数据帧中

当County的值匹配时,我需要创建第三个数据框,其中只包含列AQI和死亡率

以下是我开始的内容(死亡是更大的df):

import pandas as pd

death = pd.read_csv('SimpleDeath1.csv')
air = pd.read_csv('simpleAir.csv')

data = pd.DataFrame(columns= ['AQI', 'Death Rate'], index=None)

for i in range (0, death.size):
    if death['County'] == air['County']:
        data.append({'AQI' : air['AQI'], 'Death Rate' : death['Death Rate']})

这将输出以下错误:

ValueError: Can only compare identically-labeled Series objects

已经被广泛询问和讨论过了。在搜索此特定错误时,实际上返回了382个问题,虽然我还没有全部阅读,但我已经阅读了足够多的内容,怀疑我最初解决此问题的方法的效率。
Somehighlights从我到目前为止读到的

有人能帮助我更好地解决这个问题吗

我尝试过的一些事情:

  1. 更改比较:

    如果死亡['County')。等于(空气['County'):

不会抛出错误,但我的新数据帧为空

  1. 将数据帧值转换为字符串:

    如果死亡['County'].str()==air['County'].str()): data.append({'AQI':air['AQI'],'Death Rate':Death['Death Rate']})

抛出:

TypeError: 'StringMethods' object is not callable

任何使用数据帧或其他策略的帮助都将不胜感激


Tags: csv数据内容readdatarate错误air
2条回答

在这种情况下,您可以从以下位置使用合并功能:

import pandas as pd

death = {'County': ['Autauga', 'Baldwin'], 'Death Rate': [859, 976]}
air = {'County': ['Baldwin', 'Clay'], 'AQI': [51, 45]}

death = pd.DataFrame(death)
air = pd.DataFrame(air)

merged = death.merge(air, how='inner', on='County')
merged

这将产生:

County  Death Rate  AQI
0   Baldwin 976 51

on='County'定义包含合并操作中使用的键的列

how='inner'告诉代码仅选择两个数据帧中基于上述“country”列的键

然后可以使用pandas的drop函数删除不需要的“country”列

import pandas as pd

death = pd.DataFrame({'County': ['county1', 'county2', 'county3'], 'Deaths': [1,2,3]})
County  Deaths
0   county1 1
1   county2 2
2   county3 3

air = pd.DataFrame({'County': ['county2', 'county3', 'county4'], 'AQI': [21,32,43]})
County  AQI
0   county2 21
1   county3 32
2   county4 43

merged = pd.merge(death, air)
County  Deaths  AQI
0   county2 2   21
1   county3 3   32

相关问题 更多 >