【问题标题】:Calculate new columns from existing从现有计算新列
【发布时间】:2019-10-28 16:58:20
【问题描述】:

我有 30-35 列和 50-1500 行数据的 Excel 文件,具体取决于公司。有问题的列如下;使用剩余退款。这三列由其他列的计算组成。

USED 是 GAL 的每一行加起来,因此 excel 计算如下所示:从一个 =W2 开始,然后下一行是 W2+W3,然后是 W3+W4,依此类推

剩余是分配使用的

REFUND 是 GAL*CREDIT

这样的事情是否可行,目前我正在用 excel 进行所有计算,这很耗时,经过一些研究,我认为编写一些代码来实现自动化会更容易。 感谢任何帮助,即使它只是一列的计算

我在网上寻找了一些想法,认为 pandas 是最好的方法,但如果有其他建议,我愿意接受任何事情

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")

这是我为一列提出的:退款,我不确定如何/是否可以将所有其他列也合并到代码中

【问题讨论】:

  • 能否请您澄清您的帖子,通过期待应该如何以及从女巫列计算应该执行。一个最小的可行示例也将不胜感激。

标签: python excel pandas calculation


【解决方案1】:

考虑Series.cumsum 的累积总和:

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

从那里,任何基本的算术,如减法和乘法,都可以直接在列上运行:

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

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

或它们的函数形式,submul(以及其他类似的运算符):

# 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")

【讨论】:

    【解决方案2】:
    """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"""
    

    【讨论】:

      猜你喜欢
      • 2018-04-23
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2021-08-08
      相关资源
      最近更新 更多