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.


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'

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']

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.


¿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


¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.