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.


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'

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

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.


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.