Supongamos que tengo la siguiente tabla:

table1 = pd.DataFrame([{'account': 'Jones LLC', 'Jan': 150, 'Feb': 200, 'Mar': 140},
     {'account': 'Alpha Co',  'Jan': 200, 'Feb': 210, 'Mar': 215},
     {'account': 'Blue Inc',  'Jan': 50,  'Feb': 90,  'Mar': 95 },
                       {'account': 'Jones LLC', 'Jan': 1350, 'Feb': 1200, 'Mar': 1404},
                        {'account': 'Alpha Co',  'Jan': 300, 'Feb': 400, 'Mar': 500}])


table2 = pd.DataFrame(['Jones LLC','Alpha Co', 'Blue Inc', 'Another Company'], columns=['account'] )
  1. Estoy intentando crear una nueva columna en la tabla2 llamada "frecuencia" que cuenta cuántas veces aparece cada valor en la tabla2 en table1['account']. ¿Cómo hago esto?

  2. Además de esto, digamos que quiero que mi recuento de frecuencia de bucle for se aplique solo a las filas de la tabla1 donde el valor de table1[Jan] es mayor que 200. ¿Cómo debo escribir este "criterio múltiple" para bucle?

¿Estoy pensando mal en el problema? ¿No debería haber elegido usar un bucle for en absoluto? ¡Gracias!

0
johnconnor92 22 feb. 2018 a las 11:31

2 respuestas

La mejor respuesta

Usa map con value_counts

Parte 1

In [876]: table2['freq'] = table2.account.map(table1.account.value_counts())

In [877]: table2
Out[877]:
           account  freq
0        Jones LLC   2.0
1         Alpha Co   2.0
2         Blue Inc   1.0
3  Another Company   NaN

Parte 2

In [884]: table2['freqJAN>200'] = table2.account.map(
                           table1.query('Jan > 200').account.value_counts())

In [885]: table2
Out[885]:
           account  freq  freqJAN>200
0        Jones LLC   2.0          1.0
1         Alpha Co   2.0          1.0
2         Blue Inc   1.0          NaN
3  Another Company   NaN          NaN

O table1[table1.Jan.gt(200)].account en lugar de table1.query('Jan > 200').account

2
Zero 22 feb. 2018 a las 08:33
table3 = table1.groupby('account').size().to_frame('freq')
print(table3)

Salida:

           freq
account        
Alpha Co      2
Blue Inc      1
Jones LLC     2

O si necesita estadísticas en la lista de empresas:

table3 = table1.groupby('account').size().to_frame('freq').reindex(
                                        table2.account,fill_value=0)
print(table3)

Salida:

                 freq
account              
Jones LLC           2
Alpha Co            2
Blue Inc            1
Another Company     0
0
ilia timofeev 23 feb. 2018 a las 07:49