У меня есть такой фрейм данных
import pandas as pd
raw_data = {'ID': [101,101,102,101,102],
'Loc':['IN','IN','NY','IN','NY'],
'Sub1':['A','B','C','D','E'],
'Sub2':['F','G','H','I','J'],
'Sub3':['K','L','M','N','O'],
'S_score1': [1, 0, 0, 6,0],
'S_score2': [0, 1, 0, 6,0],
'S_score3': [0, 1, 0, 6,0],
}
df2 = pd.DataFrame(raw_data, columns = ['ID','Loc','Sub1','Sub2','Sub3','S_score1', 'S_score2', 'S_score3'])
Есть набор данных:
Я хочу проверить столбцы оценок и проверить, больше ли баллов, чем 1, затем возьму соответствующую тему и посчитайте в тексте.
Требуемый результат:
это похоже на вопрос ниже, но я не могу получить счет, так как у нас есть дополнительные столбцы, а также необходимо, чтобы требование счетчика было другим.
u = df2.filter(like='Sub'); v = df2.filter(like='S_score').astype(str); v.columns=u.columns; u=u+'('+v+')'
все остальные такие же
это ошибка, которую я получаю, не могу умножить последовательность на не-int типа 'str', так как у нас есть дополнительные столбцы. правильно ли вы упоминаете только один код холодной скорости?
u = df2.filter (например, = 'Sub'); v = df2.filter (like = 'S_score'). astype (bool); s = df2.filter (like = 'S_score'). astype (str); s.columns = u.columns; и = и + '(' + s + ')'
Учтите, что то, что я пишу как «df», означает то, что вы написали как «df2».
df['AuxIndex'] = [i for i in range(len(df))]
def ScoreText(index):
Sub1 = df['Sub1'][index]
Sub2 = df['Sub2'][index]
Sub3 = df['Sub3'][index]
Score1 = df['S_score1'][index]
Score2 = df['S_score2'][index]
Score3 = df['S_score3'][index]
if (Score1 + Score2 + Score3 == 0):
return 'You have not scored'
else:
scoreText = 'You have scored on '+ '{x}{y}{z}'.format(x = ' {}({})'.format(Sub1,Score1) if Score1 > 0 else '',
y = ' {}({})'.format(Sub2,Score2) if Score2 > 0 else '',
z = ' {}({})'.format(Sub3,Score3) if Score3 > 0 else '' )
return scoreText
df['S_Text'] = df['AuxIndex'].map(lambda i: ScoreText(i))
df.drop(columns = 'AuxIndex')
Дайте мне знать, если это поможет :)
Просто измените свои подстолбцы, прежде чем использовать метод, который мы предоставили в предыдущем вопросе.