витягнути значення стовпця на основі іншого фрейму даних панди стовпців


109

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

A  B
p1 1
p1 2
p3 3
p2 4

Як я можу отримати значення Aколи B=3? Кожного разу, коли я Aдіставав значення , я отримував об'єкт, а не рядок.


Бачу, мені слід додати item()наприкінці.
— Андерсон Чжу

df.queryі, pd.evalздається, добре підходить для цього випадку використання. Для отримання інформації про pd.eval()сімейство функцій, їх особливості та випадки використання, будь ласка, відвідайте Динамічну оцінку вираження в пандах за допомогою pd.eval () .
— cs95

Відповіді:


193

Ви можете використовувати 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()працює і для мене.
— Андерсон Чжу

3
який з них вибирати, якщо в кадрі даних є кілька записів "3" у колонці B?
— subhash

1
df.loc [df ["Condition_Column"] == 0, ("Колона_1", "Колона_2," Колона_3 "," Колона_4 ")] працює для мене. Цей приклад для вибору декількох стовпців. Вони повинні бути в кортежі.
— Мустафа Учар

якщо df.loc [df ['B'] == 300, 'A']. iloc [0] означає, що буде результатом?
— user1999109

.item (), мабуть, застарів і буде видалено. Чи є інший спосіб зробити це? Мене не цікавить назва стовпця або тип даних, який також повертається методом .loc для запиту.
— Ден

40

Ви можете спробувати query, що набирає менше:

df.query('B==3')['A']

Запит цікавий тим, що до нього також можна додати складніші пропозиції
— Самір Байд

1
ІМХО, це найкраща відповідь.
— NLR

27

df[df['B']==3]['A'], припустимо, що df - це ваші панди.DataFrame.


Чи можете ви надати посилання, де саме цей метод описаний в офіційній документації панд?
— vasili111

Я маю на увазі ][частину.
— vasili111

11

Використовуйте, df[df['B']==3]['A'].valuesякщо ви просто хочете сам предмет без дужок


Чи можете ви надати посилання, де саме цей метод описаний в офіційній документації панд? Я маю на увазі ][частину.
— 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.