Расчет данных Excel с использованием Python

#excel #excel-formula

Вопрос:

мои данные excel

Привет, я новичок в 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.