Создайте столбец во фрейме данных Pandas, который подсчитывает все строки, большие или меньше текущей строки

#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