extraer el valor de la columna basado en otro marco de datos de pandas de columna

109

Estoy un poco atascado en la extracción de valor de un condicionamiento variable en otra variable. Por ejemplo, el siguiente marco de datos:

A  B
p1 1
p1 2
p3 3
p2 4

¿Cómo puedo obtener el valor de Acuándo B=3? Cada vez que extraje el valor de A, obtengo un objeto, no una cadena.

Anderson Zhu
fuente
Ya veo, debo agregar item()al final.
Anderson Zhu
df.queryy pd.evalparecen buenos ajustes para este caso de uso. Para obtener información sobre la pd.eval()familia de funciones, sus características y casos de uso, visite Evaluación de expresión dinámica en pandas usando pd.eval () .
cs95

Respuestas:

193

Puede usar locpara obtener series que satisfagan su condición y luego ilocobtener el primer elemento:

In [2]: df
Out[2]:
    A  B
0  p1  1
1  p1  2
2  p3  3
3  p2  4

In [3]: df.loc[df['B'] == 3, 'A']
Out[3]:
2    p3
Name: A, dtype: object

In [4]: df.loc[df['B'] == 3, 'A'].iloc[0]
Out[4]: 'p3'
Anton Protopopov
fuente
24
Gracias por tu ayuda. df.loc[df['B'] == 3, 'A'].item()también funciona para mí.
Anderson Zhu
3
¿Cuál elige si el marco de datos tiene múltiples entradas de '3' en la columna B?
subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] funciona para mí. Este ejemplo para seleccionar varias columnas. Deben estar en tupla.
Mustafa Uçar
si df.loc [df ['B'] == 300, 'A']. iloc [0] significa cuál será la salida?
user1999109
.item () aparentemente ha sido obsoleto y será eliminado. Hay otra manera de hacer esto? No me interesa el nombre de la columna o el tipo de datos que también se devuelve con el método .loc para consultar.
Dan
39

Puedes probar query, que es menos escribir:

df.query('B==3')['A']
PhilChang
fuente
La consulta es interesante porque también podemos agregarle cláusulas más complejas
Samir Baid
1
En mi humilde opinión, esta es la mejor respuesta.
NLR
27

df[df['B']==3]['A'], asumiendo que df es su pandas.DataFrame.

emitido
fuente
¿Puede dar un enlace donde se describe exactamente este método en la documentación oficial de pandas?
vasili111
Me refiero a ][parte.
vasili111
11

Úselo df[df['B']==3]['A'].valuessi solo desea el artículo en sí sin los corchetes

Baz
fuente
¿Puede dar un enlace donde se describe exactamente este método en la documentación oficial de pandas? Me refiero a ][parte.
vasili111
Devuelve el resultado con []
Sid
Aún necesita poner [0]al final para acceder al valor.
rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

También he trabajado en esta cláusula y operaciones de extracción para mi asignación.

Dheeraj Pranav
fuente