извлечь значение столбца на основе другого кадра данных pandas столбца

109

Я как бы застрял при извлечении значения одной переменной, обусловливающей другую переменную. Например, следующий фрейм данных:

A  B
p1 1
p1 2
p3 3
p2 4

Как я могу узнать, Aкогда B=3? Каждый раз, когда я извлекал значение A, я получал объект, а не строку.

Андерсон Чжу
источник
Понятно, я должен добавить item()в конце.
Андерсон Чжу
df.queryи pd.evalкажутся хорошими для этого варианта использования. Для получения информации о pd.eval()семействе функций, их возможностях и вариантах использования посетите страницу Dynamic Expression Evaluation в pandas, используя pd.eval () .
cs95

Ответы:

197

Вы можете использовать locдля получения серии, которая удовлетворяет вашему условию, а затем ilocдля получения первого элемента:

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
Спасибо за вашу помощь. df.loc[df['B'] == 3, 'A'].item()у меня тоже работает.
Андерсон Чжу
4
какой из них он выбирает, если во фрейме данных есть несколько записей «3» в столбце B?
subhash
1
df.loc [df ["Condition_Column"] == 0, ("Column_1", "Column_2," Column_3 "," Column_4 ")] работает для меня. Этот пример для выбора нескольких столбцов. Они должны быть в кортеже.
Мустафа Учар
если df.loc [df ['B'] == 300, 'A']. iloc [0] означает, что будет на выходе?
user1999109 02
.item (), по-видимому, устарел и будет удален. Есть другой способ сделать это? Меня не интересует имя столбца или типа данных, которые также возвращаются с помощью метода .loc для запроса.
Дэн
42

Вы можете попробовать query, что меньше печатает:

df.query('B==3')['A']
Филчанг
источник
Запрос интересен тем, что мы также можем добавить к нему более сложные предложения
Самир Байд,
1
ИМХО, это лучший ответ.
NLR
27

df[df['B']==3]['A'], предполагая, что df - это ваш pandas.DataFrame.

излучается
источник
Подскажите пожалуйста ссылку, где именно этот метод описан в официальной документации pandas?
vasili111
Я имею в виду ][часть.
vasili111
11

Используйте, df[df['B']==3]['A'].valuesесли вам просто нужен сам предмет без скобок

Баз
источник
Подскажите пожалуйста ссылку, где именно этот метод описан в официальной документации pandas? Я имею в виду ][часть.
vasili111
Он возвращает результат с []
Сид
Вам все равно нужно поставить [0]в конце, чтобы получить доступ к значению.
rubebop
0
male_avgtip=(tips_data.loc[tips_data['sex'] == 'Male', 'tip']).mean()

Я также работал над этой операцией наложения и извлечения для моего задания.

Дирадж Пранав
источник