gpt4 book ai didi

python - 使用 Pandas 根据两个不同列中的值计算行数

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:59 29 4
gpt4 key购买 nike

我有这个数据框,叫做“dem”:

              code                                                CBO SEXO  \
47 58 NaN F
48 58 Ajudante de motorista F
49 58 Ajudante de motorista M
50 58 Ajudante de motorista M
51 58 Brasador NaN
52 58 Brasador M
53 58 Brasador M

FAIXA_IDADE ESCOLARIDADE
47 DE 21 A 30 ANOS Superior completo
48 MAIS DE 50 ANOS NaN
49 DE 21 A 30 ANOS Ginasial completo, ou Fundamental completo
50 DE 41 A 50 ANOS Colegial incompleto, ou Médio incompleto
51 DE 41 A 50 ANOS Colegial completo, ou Médio completo
52 DE 41 A 50 ANOS Colegial completo, ou Médio completo
53 DE 41 A 50 ANOS Ginasial completo, ou Fundamental completo

我想知道在 CBO 列中有多少行包含单词“motorista”或“Motorista”,并且在 ESCOLARIDADE 列中包含单词“Fundamental completo”。因此,结果应该是 1(CBO 包含“motorista”的三行,但只有一行 ESCOLARIDADE 包含“Fundamental completo”)。

我试过了:

try:
mot_fund_comp=dem.loc[dem.CBO.str.contains('motorista|Motorista')].ESCOLARIDADE.str.contains['Fundamental completo'].count()
except:
mot_fund_comp=0

我总是得到 0。

和:

当我在下面的数据框中应用同一行时,它给我带来了结果 1,而它应该为零......

dem:

code CBO SEXO \
89 59 Alimentador de linha de produção NaN
90 59 Alimentador de linha de produção M
91 59 Alimentador de linha de produção M
92 59 Alimentador de linha de produção M
93 59 Assistente de laboratório industrial F
94 59 Auxiliar de escritório M
95 59 Auxiliar de manutenção predial F
96 59 Balanceiro M
97 59 Comprador M
98 59 Desidratador de alimentos M
99 59 Desidratador de alimentos M
100 59 Desidratador de alimentos M
101 59 Desidratador de alimentos M
102 59 Mecânico de manutenção de máquinas, em geral M
103 59 Motorista de caminhão (rotas regionais e inter... M
104 59 Operador de filtro-prensa (tratamentos químico... M
105 59 Soldador M
106 59 Soldador M
107 59 Soldador M

FAIXA_IDADE ESCOLARIDADE
89 MAIS DE 50 ANOS Colegial completo, ou Médio completo
90 DE 21 A 30 ANOS NaN
91 DE 21 A 30 ANOS Colegial completo, ou Médio completo
92 DE 41 A 50 ANOS Ginasial incompleto, ou entre 4ª e 8ª série
93 DE 21 A 30 ANOS NaN
94 DE 21 A 30 ANOS Colegial completo, ou Médio completo
95 DE 41 A 50 ANOS Colegial completo, ou Médio completo
96 DE 21 A 30 ANOS Colegial completo, ou Médio completo
97 MAIS DE 50 ANOS Colegial completo, ou Médio completo
98 DE 21 A 30 ANOS Colegial completo, ou Médio completo
99 DE 31 A 40 ANOS Colegial completo, ou Médio completo
100 DE 31 A 40 ANOS Ginasial completo, ou Fundamental completo
101 MAIS DE 50 ANOS Colegial completo, ou Médio completo
102 DE 41 A 50 ANOS Colegial completo, ou Médio completo
103 DE 41 A 50 ANOS Colegial completo, ou Médio completo
104 DE 31 A 40 ANOS Colegial completo, ou Médio completo
105 DE 31 A 40 ANOS Colegial completo, ou Médio completo
106 DE 41 A 50 ANOS Colegial completo, ou Médio completo
107 MAIS DE 50 ANOS Colegial completo, ou Médio completo

有人会建议如何修复它或建议另一种方法吗?

最佳答案

感谢@roganjosh 给予寻找答案的灵感。

我注意到当我使用“|”时作为 contains 函数中的 OR 运算符,有时它可以正常工作,有时则不能。如果我在这里使用它:

df=dem.CBO.str.contains('motorista|Motorista').sum()

它工作正常。但是,为了解决我上面的问题,我不得不调整它,而不是使用“|”在 contains 函数中。我将代码更改为:

mot_fund_comp=dem.loc[dem.CBO.str.contains('motorista') | dem.CBO.str.contains('Motorista')].ESCOLARIDADE.str.contains['Fundamental completo'].sum()

另一个细节:出于某种原因我无法追踪,如果我使用“.count()”,值就会出错。如果我使用“.sum()”,它会完美地工作。

关于python - 使用 Pandas 根据两个不同列中的值计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48955262/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com