Рассчитать новые столбцы из существующих - PullRequest
1 голос
/ 28 октября 2019

У меня есть файлы Excel с 30-35 столбцами и 50-1500 строками данных в зависимости от компании. Рассматриваемые столбцы следующие:ИСПОЛЬЗУЕТСЯ ОСТАВИТЬ ВОЗВРАТ. Эти три столбца состоят из вычислений из других столбцов.

ИСПОЛЬЗУЕТСЯ - каждая строка GAL складывается по мере продвижения, поэтому вычисление Excel выглядит следующим образом: начинается с единицы = W2, затем следующая строка - W2+ W3, затем W3 + W4 и т. Д.

REMAIN назначен для использования

REFUND is GAL * CREDIT

Возможно ли что-то подобное, в настоящее время я делаюВсе вычисления в Excel занимают много времени, и после некоторого исследования я полагаю, что было бы проще написать код, чтобы автоматизировать это. Благодарен за любую помощь, даже если это всего лишь расчеты для одного столбца

Я искал некоторые идеи онлайн, и фигуры панд - лучший способ справиться с этим, но если что-то еще предложено, я открыт длячто-нибудь

import pandas as pd
filename = home/itdept/Documents/BestWines.xlsx
df = pd.read_excel(filename)
df['Refund'] = df['QUANTITY IN GAL']*df['CBMA Credit']
df.head(5)
df.to_excel("path to save")

Это то, что я придумал для одного столбца: Возврат, я не был уверен, как / если бы я мог также включить все остальные столбцы в код

Ответы [ 2 ]

1 голос
/ 28 октября 2019

Рассмотрим Series.cumsum для кумулятивной суммы:

df['USED'] = df['GAL'].cumsum()

Отсюда любая базовая арифметика, такая как вычитание и умножение, может выполняться непосредственно для столбцов:

# SUBTRACTION
df['REMAIN'] = df['ASSIGNED'] - df['USED']

# MULTIPLICATION
df['REFUND'] = df['QUANTITY IN GAL'] * df['CBMA Credit']

Или их функциональные формы: sub и mul (среди других аналогичных операторов):

# SUBTRACTION
df['REMAIN'] = df['ASSIGNED'].sub(df['USED'])

# MULTIPLICATION
df['REFUND'] = df['QUANTITY IN GAL'].mul(df['CBMA Credit'])

В целом рассмотрим assign за одно компактное утверждение:

import pandas as pd

filename = "home/itdept/Documents/BestWines.xlsx"
df = (pd.read_excel(filename)
        .assign(USED = lambda x: x['GAL'].cumsum(),
                REMAIN = lambda x: x['ASSIGNED'].sub(x['USED']),
                REFUND = lambda x: x['QUANTITY IN GAL'].mul(x['CBMA Credit'])
               )
     )

df.head(5)
df.to_excel("path to save")
1 голос
/ 28 октября 2019
"""importing packages to be used in our code"""
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile


"""importing excel content to df DataFrame"""
df = pd.read_excel('sflowone.xlsx', sheetname='Sheet1')

""" we will use LIST for updating (USED)coloumn"""
newlist = []        # created empty list

x=int(0)            # created a variable which will take all values of "GAL"
for value in df["GAL"]: # FOR LOOP will run for every value in "GAL" and takes data in "value"
    x = value + x       # add all earliear entries of "GAL"
    newlist.append(x)   # here we append the new values of x inside empty list
df.drop("USED",axis=1,inplace= True)  # deleted the "USED" column if exist before updating.
df.insert(3,"USED",newlist)     # inserted updated "USED" column with newlist in index number "3" 


"""Updating (REMAIN) and  (REFUND)"""
df ["REMAIN"]= df["ASSIGNED"]- df["USED"]
df ["REFUND"]= df["GAL"]* df["CREDIT"]

""" Visualising first 5 entries"""
df.head(5)
""" saving to Excel sheet """
df.to_excel("sflowfinal.xlsx")


"""CODE IS TESTED AND RUNNING, for query please reply"""
...