#python #pandas #dataframe #countif
#python #pandas #фрейм данных #countif
Вопрос:
У меня есть фрейм данных, который включает игрока, зарплату и счет, и я хочу отметить записи, в которых зарплата выше, а счет ниже, чем у любых других игроков в фрейме данных.
Я новичок в python, поэтому, вероятно, я далек от того, как я думаю об этом.
import pandas as pd
df = pd.DataFrame([['A',12000,100],['B',13000,110],['C',13300,105],['D',12500,102],['E',11800,101]],columns=['Player','Salary','Score'])
df['OverPriced']= (df['Score'].iloc[:]>df['Score'] amp; df['Salary'].iloc[:]<df['Salary']).count()
Print(df)
Я хотел бы видеть что-то вроде следующего:
Player Salary Score Overpriced
0 A 12000 100 1
1 B 13000 110 0
2 C 13300 105 1
3 D 12500 102 0
4 E 11800 101 0
Ответ №1:
Здесь я использую numpy
широковещательную передачу и с any
import numpy as np
s1=df.Salary.values
s2=df.Score.values
df['Overpriced']=np.any((s1>s1[:,None])amp;(s2<s2[:,None]),0).astype(int)
df
Out[377]:
Player Salary Score Overpriced
0 A 12000 100 1
1 B 13000 110 0
2 C 13300 105 1
3 D 12500 102 0
4 E 11800 101 0
Комментарии:
1. Извините, на самом деле это не возвращает правильный ответ. Я бы ожидал, что ‘A’ и ‘C’ будут помечены как завышенные, поскольку есть другие варианты, которые дешевле и дают более высокий балл (B> C и E> A)
2. Исправлено путем переключения символов <> . Еще раз спасибо.
3. @JarrodHolmes проверьте обновление, я ввел его неправильно, измените np.any с 1 на 0