wyodrębnij wartość kolumny na podstawie innej kolumny

Utknąłem na wyciąganiu wartości jednej zmiennej warunkującej na inną zmienną. Na przykład, następujący dataframe:

A  B
p1 1
p1 2
p3 3
p2 4

Jak mogę uzyskać wartość A Kiedy B=3? Za każdym razem, gdy wyodrębniałem wartość A, otrzymywałem obiekt, a nie ciąg znaków.

Author: Shaido, 2016-04-18

6 answers

You could use loc aby uzyskać serię spełniającą twój stan, a następnie iloc aby uzyskać 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'
 229
Author: Anton Protopopov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 04:32:11

Możesz spróbować query, czyli mniej pisać:

df.query('B==3')['A']
 46
Author: PhilChang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 11:15:18

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

 31
Author: emited,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 01:24:24

Użyj df[df['B']==3]['A'].values, jeśli chcesz, aby element był sam bez nawiasów

 14
Author: Baz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-16 08:08:48

Łatwiej mi myśleć w tych terminach, ale pożyczając od innych odpowiedzi. Żądana wartość znajduje się w serii:

df[*column*][*row*]

Gdzie kolumna i wiersz wskazują wartość, którą chcesz zwrócić. Dla przykładu, column jest 'A', a dla row używasz maski:

df['B'] == 3

Aby uzyskać wartość z serii istnieje kilka opcji:

df['A'][df['B'] == 3].values[0]
df['A'][df['B'] == 3].iloc[0]
df['A'][df['B'] == 3].to_numpy()[0]
 3
Author: drT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-01 17:19:27
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()
Pracowałam również nad tym clausingiem i ekstrakcją dla mojego zadania.
 1
Author: Dheeraj Pranav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-29 19:07:29