извлечь значение столбца на основе другого кадра данных 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()

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.