wyodrębnij wartość kolumny na podstawie innej ramki danych pandy kolumn

109

Utknąłem na wyodrębnianiu wartości jednej zmiennej warunkującej inną zmienną. Na przykład następująca ramka danych:

A  B
p1 1
p1 2
p3 3
p2 4

Jak mogę sprawdzić, Akiedy B=3? Za każdym razem, gdy wyodrębniłem wartość A, otrzymałem obiekt, a nie ciąg.

Anderson Zhu
źródło
Rozumiem, powinienem dodać item()na końcu.
Anderson Zhu
df.queryi pd.evalwydaje się, że dobrze pasuje do tego przypadku użycia. Aby uzyskać informacje na temat pd.eval()rodziny funkcji, ich funkcji i przypadków użycia, odwiedź stronę Dynamic Expression Evaluation w pandach przy użyciu pd.eval () .
cs95

Odpowiedzi:

193

Możesz użyć, locaby otrzymać serię spełniającą twój warunek, a następnie ilocuzyskać pierwszy element:

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
źródło
24
Dzięki za pomoc. df.loc[df['B'] == 3, 'A'].item()dla mnie też działa.
Anderson Zhu
3
który z nich wybiera, jeśli ramka danych ma wiele wpisów „3” w kolumnie B?
subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] działa w moim przypadku. Ten przykład dotyczy wyboru wielu kolumn. Powinny być w krotce.
Mustafa Uçar
jeśli df.loc [df ['B'] == 300, 'A']. iloc [0] oznacza, jakie będzie wyjście?
user1999109
.item () najwyraźniej jest przestarzały i zostanie usunięty. Czy jest inny sposób, aby to zrobić? Nie interesuje mnie nazwa kolumny lub typ danych, który jest również zwracany z metodą .loc do zapytania.
Dan
41

Możesz spróbować query, co oznacza mniej pisania:

df.query('B==3')['A']
PhilChang
źródło
Zapytanie jest interesujące, ponieważ możemy dodać do niego bardziej złożone klauzule
Samir Baid
1
IMHO, to najlepsza odpowiedź.
NLR
27

df[df['B']==3]['A'], zakładając, że df to twoje pandy.

emitowane
źródło
Czy możesz podać link, gdzie dokładnie ta metoda jest opisana w oficjalnej dokumentacji pandy?
vasili111
Mam na myśli ][część.
vasili111
11

Użyj, df[df['B']==3]['A'].valuesjeśli chcesz tylko element bez nawiasów

Baz
źródło
Czy możesz podać link, gdzie dokładnie ta metoda jest opisana w oficjalnej dokumentacji pandy? Mam na myśli ][część.
vasili111
Zwraca wynik z []
Sid
Nadal musisz umieścić [0]na końcu, aby uzyskać dostęp do wartości.
rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Pracowałem również nad tymi operacjami klauzulowania i ekstrakcji dla mojego zadania.

Dheeraj Pranav
źródło