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

2024-03-29 14:38:28 发布

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

我有一个数据帧,叫做“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列中包含单词“basical completo”。因此,结果应该是1(有三行CBO包含“motorista”,但只有一行ESCOLARIDADE包含“basical 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,当它应该是0时。。。你知道吗

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

有人会建议如何修复它还是建议另一种方法?你知道吗


Tags: oudenandemdiofundamentalcompletomais
2条回答

感谢@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()”它工作得很好。你知道吗

给你。我保留了相同的列名,但将motorista替换为yes,motorista替换为yea,将completo替换为yes\u。你知道吗

     import pandas as pd
     import numpy as np

     data = {'CBO': ['yes', 'no', 'yea', 'no', 'yes'], 'escolaridade': 
             ['no', 'no', 'yes_please', 'yes_please', 'yes_please']}
     df = pd.DataFrame(data, columns=['CBO', 'escolaridade'])

     df['value'] = ((df['CBO'] == 'yes') | (df['CBO'] == 'yea')) & 
                   (df['escolaridade'] == 'yes_please')

它刚刚创建了一个新行,通过使用标志True来显示哪些行包含所需的值。你知道吗

然后:

    df = df[df['value'] == True]

提供所需的所有行:

    CBO escolaridade    value
    2   yea yes_please  True
    4   yes yes_please  True

显示第2行和第4行的值就是您要查找的值。从这里你可以很容易地收集你需要的行。你知道吗

相关问题 更多 >