Я хочу создать новый столбец, который показывает среднее значение для нескольких условий. По большей части новый столбец должен вычислять среднее значение для 3 столбцов. Однако если разница между A и B или B и C больше 10, тогда следует использовать только 2 значения с наименьшей разницей.
Например, если A = 2, B = 15 и C = 13, в среднем столбце должно отображаться 14. Поскольку разница между A и B больше 10, поэтому в столбце должны использоваться B и C, поскольку они имеют наименьшую разницу выработать среднее.
Я попытался добавить дополнительные столбцы, которые определяют разницу между A и B и для B и C. После этого я использовал условный оператор, чтобы создать список, который добавляет средние вычисления на основе условий, а затем добавить список в виде колонка. Однако я получаю ошибку «Длина значений не соответствует длине индекса».
Этот код используется для создания моего фрейма данных:
df = pd.DataFrame(np.random.randint(0,20,size=(50, 3)),
columns=list('ABC'))
Моя попытка найти решение:
df['diff_1'] = df['A'] - df['B']
df['diff_2'] = df['B'] - df['C']
average = []
for i in df['diff_1']:
if i < -5:
average.append(df[['A','B']].mean(axis=1))
if i > 5:
average.append(df[['A','B']].mean(axis=1))
else:
average.append(df[['A','B','C']].mean(axis=1))
df['average'] = average
Я бы тогда повторил для diff_2 и удалил дубликаты, однако это дает мне вышеупомянутую ошибку:
Msgstr "Длина значений не соответствует длине индекса". Поэтому мне интересно, есть ли более подходящий метод.
Я ожидаю столбец, который показывает среднее значение всех трех столбцов, за исключением случаев, когда разница между A и B или B и C больше 10. Если это так, то следует рассчитать среднее значение, используя только 2 числа с самая низкая разница.