создайте два новых столбца, используя два существующих столбца, и сначала проверьте номер строки в pandas - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу создать функцию, которая принимает одну строку из фрейма данных в качестве входных данных, возвращает две переменные и хочет проверить ее в строке 0. Мой фрейм данных df и имеет два столбца FTHG и FTAG. Оба имеют целочисленные значения.

Я хочу создать два новых столбца HP и AP.

  • , если FTHG == FTAG then HP = 1 and AP = 1`
  • , если FTHG > FTAG, то HP=3 and AP=0
  • , если FTHG < FTAG затем HP=0 and AP=3.

Я пытался это сделать, но не получил ни ошибки, ни результата.

def calc_score(row): 
    if df.loc[row,"FTHG"] == df.loc[row,"FTAG"]:
        df.loc[row,"HP"] = 1
        df.loc[row,"AP"] = 1
    elif df.loc[row,"FTHG"] > df.loc[row,"FTAG"]:
        df.loc[row,"HP"] = 3
        df.loc[row,"AP"] = 0
    else:
        df.loc[row,"HP"] = 0
        df.loc[row,"AP"] = 3
calc_score(0)

Я хочу увидеть значения HP и AP для строки 0. Но ничего не получите после задания calc_score (0). Пожалуйста, скажите мне, где я делаю неправильно.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

Вы можете попробовать np.select вместо циклов:

cond1 = df['FTHG'].eq(df['FTAG'])
choice1 = [1,1]
cond2 = df['FTHG'].gt(df['FTAG'])
choice2 = [3,0]
cond3 = df['FTHG'].lt(df['FTAG'])
choice3 = [0,3]
df[['HP','AP']]= pd.DataFrame(np.select([cond1[:,None],cond2[:,None],cond3[:,None]],
                                        [choice1,choice2,choice3]))
print(df)

   FTHG  FTAG  HP  AP
0     4     0   3   0
1     1     5   0   3
2     0     3   0   3
3     5     2   3   0
4     7     5   3   0
0 голосов
/ 20 апреля 2020

вы можете использовать np.select

conditions_hp  = [ df['FTHG'] == df['FTHG'],  df['FTHG'] > df['FTHG'],  df['FTHG'] < df['FTHG'] ]
conditions_ap  = [ df['FTHG'] == df['FTHG'],  df['FTHG'] < df['FTHG'],  df['FTHG'] > df['FTHG'] ]
choices     = [ 1, 3, 0 ]
df2['HP'] = np.select(conditions_hp, choices, default=np.nan)
df2['AP'] = np.select(conditions_ap, choices, default=np.nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...