Я хочу добавить новый столбец, чтобы увидеть различия экзаменов в процентах.
import pandas as pd
exam_1 = {
'Name': ['Jonn', 'Tomas', 'Fran', 'Olga', 'Veronika', 'Stephan'],
'Mat': [85, 75, 50, 93, 88, 90],
'Science': [96, 97, 99, 87, 90, 88],
'Reading': [80, 60, 72, 86, 84, 77],
'Wiritng': [78, 82, 88, 78, 86, 82],
'Lang': [77, 79, 77, 72, 90, 92],
}
exam_2 = {
'Name': ['Jonn', 'Tomas', 'Fran', 'Olga', 'Veronika', 'Stephan'],
'Mat': [80, 80, 90, 90, 85, 80],
'Science': [50, 60, 85, 90, 66, 82],
'Reading': [60, 75, 55, 90, 85, 60],
'Wiritng': [56, 66, 90, 82, 60, 80],
'Lang': [80, 78, 76, 90, 77, 66],
}
df_1 = pd.DataFrame(exam_1)
df_2 = pd.DataFrame(exam_2)
#cmp = pd.merge(df_1, df_2, how = "outer", on=["Name"], suffixes=("_1", "_2"))
cmp = pd.merge(
df_1, df_2, how = "outer", on=["Name"],
suffixes=("_1", "_2")).set_index("Name").sort_index(axis=1).reset_index()
print(cmp)
Вывод приведенного выше кода аналогичен приведенному ниже;
Name Lang_1 Lang_2 Mat_1 Mat_2 Reading_1 Reading_2 Science_1 Science_2 Wiritng_1 Wiritng_2
0 Jonn 77 80 85 80 80 60 96 50 78 56
1 Tomas 79 78 75 80 60 75 97 60 82 66
2 Fran 77 76 50 90 72 55 99 85 88 90
3 Olga 72 90 93 90 86 90 87 90 78 82
4 Veronika 90 77 88 85 84 85 90 66 86 60
5 Stephan 92 66 90 80 77 60 88 82 82 80
Я хочу, чтобы добавить новый столбец после сравниваемого значения, есть ли какая-либо встроенная функция для этого. Поскольку постоянный раздел, такой как имя, может быть изменен, возможно, 3 столбца могут быть постоянными в будущем. Я хочу использовать встроенную функцию для повторного использования.
Я пытаюсь использовать его вручную, но его нельзя использовать повторно.
Что я хочу именно ниже;
Name Lang_1 Lang_2 Lang_Res Mat_1 Mat_2 Mat_Res Reading_1 Reading_2 Reading_Res Science_1 Science_2 Science_Res Writing_1 Writing_2 Writing_Res
0 Jonn 77 80 Lang_data 85 80 Mat_data 80 60 Reading_data 96 50 Science_data 78 56 Writing_data
1 Tomas 79 78 Lang_data 75 80 Mat_data 60 75 Reading_data 97 60 Science_data 82 66 Writing_data
2 Fran 77 76 Lang_data 50 90 Mat_data 72 55 Reading_data 99 85 Science_data 88 90 Writing_data
3 Olga 72 90 Lang_data 93 90 Mat_data 86 90 Reading_data 87 90 Science_data 78 82 Writing_data
4 Veronika 90 77 Lang_data 88 85 Mat_data 84 85 Reading_data 90 66 Science_data 86 60 Writing_data
5 Stephan 92 66 Lang_data 90 80 Mat_data 77 60 Reading_data 88 82 Science_data 82 80 Writing_data
отредактировал исходный пост
Если я правильно понимаю, вы надеетесь вычислить столбец из двух других связанных столбцов.
Я предлагаю вот что.
prefixes = ['Lang', 'Mat', 'Reading', ...]
_1
и _2
для каждого префикса.for prefix in prefixes:
column1 = df[f"{prefix}_1"]
column2 = df[f"{prefix}_2"]
averaged = (column1 + column2) / 2
df.loc[:, f"{prefix}_average"] = averaged
Это добавит средний столбец для каждой категории, для которой у вас есть префикс.
Да, правильно, но все же мне нужно брать префиксы, которые можно изменить в дальнейшем, что нарушит возможность повторного использования. Я ищу встроенную функцию
Как бы вы хотели, чтобы он выводил, какие столбцы объединять?
только столбец, который включал сравнение, также я отредактировал исходный пост, чтобы показать, чего я хочу достичь.
Вы можете начать с создания списка, в котором каждый столбец имеет суффикс _2
, а затем использовать pandas.DataFrame.insert с pandas.Index.get_loc в понимании списка, чтобы вставить столбцы результатов туда, где они должны.
Попробуй это :
edge_cols= cmp.columns.str.extractall("(\w+_2)")[0].tolist()
[cmp.insert(cmp.columns.get_loc(col)+1, col.split("_")[0]+"_Res", col.split("_")[0]+"_Data") for col in edge_cols]
print(cmp.to_string())
Name Lang_1 Lang_2 Lang_Res Mat_1 Mat_2 Mat_Res Reading_1 Reading_2 Reading_Res Science_1 Science_2 Science_Res Wiritng_1 Wiritng_2 Wiritng_Res
0 Jonn 77 80 Lang_Data 85 80 Mat_Data 80 60 Reading_Data 96 50 Science_Data 78 56 Wiritng_Data
1 Tomas 79 78 Lang_Data 75 80 Mat_Data 60 75 Reading_Data 97 60 Science_Data 82 66 Wiritng_Data
2 Fran 77 76 Lang_Data 50 90 Mat_Data 72 55 Reading_Data 99 85 Science_Data 88 90 Wiritng_Data
3 Olga 72 90 Lang_Data 93 90 Mat_Data 86 90 Reading_Data 87 90 Science_Data 78 82 Wiritng_Data
4 Veronika 90 77 Lang_Data 88 85 Mat_Data 84 85 Reading_Data 90 66 Science_Data 86 60 Wiritng_Data
5 Stephan 92 66 Lang_Data 90 80 Mat_Data 77 60 Reading_Data 88 82 Science_Data 82 80 Wiritng_Data
Можете ли вы привести пример того, как вы хотите, чтобы ваш вывод выглядел?