#excel #excel-formula
Вопрос:
Привет, я новичок в Python. Мне нужно выполнить арифметический расчет данных Excel с помощью Python, но расположение данных немного сложное.
Я должен рассчитать
(D5*D4 C5*C4)*B5
которые результаты помещаются в колонку H
затем он продолжается на все материалы (жировая ткань новорожденного № 1 до жировой ткани взрослого № 1).
(D6*D4 C6*C4)*B6
(D7*D4 C7*C4)*B7
(D8*D4 C8*C4)*B8
и т.д.
Кто-нибудь может мне помочь, пожалуйста? Ниже приведены мои текущие коды, и я застрял в том, как закодировать операцию. Заранее большое вам спасибо
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
%matplotlib inline
# read an excel file and convert
# into a dataframe object
df = pd.DataFrame(pd.read_excel("ICRU_blank_af.xlsx"))
# show the dataframe
df.head(5)
Комментарии:
1. Есть ли причина, по которой вы не можете выполнить этот расчет в Excel? Похоже, вам нужно будет только добавить некоторые абсолютные ссылки в строки, т. Е.
=(D5*D$4 C5*C$4)*B5
в ячейкуH5
и скопировать вниз.
Ответ №1:
Я бы рекомендовал что-то вроде следующего:
data = {'first_column': [1, 2, 3, 4, 5, 6, 7, 8],
'second_column': [1, 2, 3, 4, 5, 6, 7, 8],
'third_column': [1, 2, 3, 4, 5, 6, 7, 8],
'fourth_column': [1, 2, 3, 4, 5, 6, 7, 8]
}
df = pd.DataFrame(data)
#solving for ((D*D) (C*C))*B
#Assume first_column equates to Col D
#Assume second_column equates to Col C
#Assume third_column equates to Col B
#Pulling pairs of D column
first_pair = list(zip(df['first_column'], df['first_column'].iloc[1:]))
#pulling pairs of C column
second_pair = list(zip(df['second_column'], df['second_column'].iloc[1:]))
#(D5*D4)
first_multiplication = [reduce(operator.mul, tup, 1) for tup in first_pair]
#(C5*C4)
second_multiplication = [reduce(operator.mul, tup, 1) for tup in second_pair]
final_value = []
#solving for ((D5*D4) (C5*C4))*B5
for first, second, third in zip(first_multiplication,second_multiplication,df['third_column']):
value = first second *third
final_value.append(value)
Мои результаты следующие:
first_pair/second_pair = [(1,2),(2,3),(3,4),(4,5)…]
first_multiplication/second_multiplication = [2,6,12,20,…]
значение первой формулы = 4 ((2) (2))*1 окончательный список (для добавления в новый столбец) = [4,24,72,160,300,504,784]
Комментарии:
1. Привет, спасибо за ваш ответ, однако моя таблица немного сложная. Я думаю, что коды, которые вы дали, предназначены для базовой таблицы, но моя таблица и необходимые вычисления сложны. Мне нужно «вытащить» некоторые конкретные ячейки в моих расчетах, так что это моя путаница
2. @ХанаТ. A Я отредактировал свой ответ. Пожалуйста, обратите внимание, что я в основном дал вам формулу. Если у вас есть какие-либо вопросы, дайте мне знать. Пожалуйста, также озвучьте мое решение, если я ответил на ваш вопрос.
Ответ №2:
Я прочитал ваш вопрос более подробно, и я думаю, что вы смотрите на создание некоторых констант:
data = {'first_column': [1, 2, 3, 4, 5, 6, 7, 8],
'second_column': [1, 2, 3, 4, 5, 6, 7, 8],
'third_column': [1, 2, 3, 4, 5, 6, 7, 8],
'fourth_column': [1, 2, 3, 4, 5, 6, 7, 8]
}
df = pd.DataFrame(data)
#solving for ((D5*$D$4) (C5*$C$4))*B5
#Assume first_column equates to Col d
#Assume second_column equates to Col C
#Assume third_column equates to Col B
first_pairing = []
second_pairing = []
#(D*$D$X)
for cell in df['first_column']:
pairing = cell * df['first_column'].iloc[0]
first_pairing.append(pairing)
#(C*$C$X)
for cell in df['second_column']:
pairing = cell * df['second_column'].iloc[0]
second_pairing.append(pairing)
final_value = []
#solving for ((D5*$D$4) (C5*$C$4))*B5
for first, second, third in zip(first_pairing,second_pairing,df['third_column']):
value = first second *third
final_value.append(value)
Я бы заменил значения iloc на точную строку, которую вы хотите сохранить в качестве константы, и имена столбцов, соответствующие именам заголовков df.