如何仅在比较结果不匹配的pandas中的列时创建数据框?

时间:2017-11-12 10:41:53

标签: python pandas

我有这个数据框deputados_sites:

deputados_sites.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 512 entries, 0 to 511
Data columns (total 3 columns):
Nome              512 non-null object
Num_referencia    512 non-null object
Link              512 non-null object
dtypes: object(3)
memory usage: 12.1+ KB

另一个eleitos_d:

eleitos_d.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 513 entries, 23 to 26219
Data columns (total 7 columns):
Estado            513 non-null object
Cargo             513 non-null object
Nome_candidato    513 non-null object
CPF               513 non-null int64
Nome_urna         513 non-null object
Partido           513 non-null object
Situacao          513 non-null object
dtypes: int64(1), object(6)
memory usage: 32.1+ KB

我将数据框与名称合并:

sites_eleitos = pd.merge(deputados_sites, eleitos_d, left_on='Nome', right_on='Nome_urna')

sites_eleitos.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 341 entries, 0 to 340
Data columns (total 10 columns):
Nome              341 non-null object
Num_referencia    341 non-null object
Link              341 non-null object
Estado            341 non-null object
Cargo             341 non-null object
Nome_candidato    341 non-null object
CPF               341 non-null int64
Nome_urna         341 non-null object
Partido           341 non-null object
Situacao          341 non-null object
dtypes: int64(1), object(9)
memory usage: 29.3+ KB

但我也想创建一个未找到的数据框。 &#34; Nome&#34; deputados_sites中未在&#34; Nome_urna&#34;中找到的列eleitos_d中的列

在eleitos_d上找到的deputados_sites上显示内容。我正在使用。 Python3和pandas

拜托,有没有人知道这样做的命令?

1 个答案:

答案 0 :(得分:2)

我认为您需要outer加入merge中的参数indicator=True,然后仅针对left_onlydeputados_sites中的行过滤right_only eleitos_d的{​​{1}}和both中的行DataFramesites_eleitos = pd.merge(deputados_sites, eleitos_d, left_on='Nome', right_on='Nome_urna', how='outer', indicator=True) ldf = sites_eleitos.query("_merge == 'left_only'").drop('_merge',axis=1) rdf = sites_eleitos.query("_merge == 'right_only'").drop('_merge',axis=1) bdf = sites_eleitos.query("_merge == 'both'").drop('_merge',axis=1)

ldf = sites_eleitos[sites_eleitos['_merge'] == 'left_only'].drop('_merge',axis=1)
rdf = sites_eleitos[sites_eleitos['_merge'] == 'right_only'].drop('_merge',axis=1)
bdf = sites_eleitos[sites_eleitos['_merge'] == 'both'].drop('_merge',axis=1)

query

min. number