Генерировать 12 месяцев для каждого поля в pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть набор данных следующим образом

 Particulars "TotalBud"  "TotalTar"
Staff Cost   374.58      320.45 
Staff Expenses   15.81   13.53 
Supply Costs     56.35   48.21 
Labour costs     22.41   19.19 
  

Я хочу сгенерировать фрейм данных, который выглядит как :

 "Particulars"   "TotalBud"  "TotalBud_Apr"  "TotalBud_May"  "TotalBud_Jun"  "TotalBud_Mar"  "TotalTar"  "TotalTar_Apr"  "TotalTar_May"  "TotalTar_Feb"  "TotalTar_Mar"
Staff Cost   374.58      31.21   2.60    0.22    0.02    320.45      266.33      212.20      158.07  03.95 
Staff Expenses   15.81   1.32    0.11    0.01    0.00    13.53   11.25   8.97    6.69    4.41 
Supply Costs     56.35   4.70    0.39    0.03    0.00    48.21   40.07   31.93   23.79   15.65 
Labour costs     22.41   1.87    0.16    0.01    0.00    19.19   15.96   12.74   9.51    6.29 
  

Я хочу, чтобы столбцы с апреля по март для каждого существующего столбца, и они должны быть x / 12, где x — исходное значение этого столбца. Если мой файл Excel содержит новые столбцы, код должен иметь возможность выполнять итерации и генерировать для них поля месяца

Комментарии:

1. Что вы пробовали до сих пор?

2. Я пока ничего не могу сформулировать, поскольку я новичок в python

3. для f в glob.glob(«Raw/*.xlsx»): xls = pd.ExcelFile(f) df1 = xls.parse(sheet_name=0) df1[‘Total_Bud_Apr’] = df1[‘TotalnBud’]/12 печать (df1.head())

Ответ №1:

 import pandas as pd
import xlsxwriter

data = pd.read_excel('Budget.xlsx',sheet_name=0)
data.fillna(0,inplace=True)

new_colums = data.columns
new_colums = new_colums.insert(1,'Month')

master_data = pd.DataFrame(columns=new_colums)

month_list = ['APR-20','MAY-20','JUN-20','JUL-20','AUG-20','SEP-20','OCT-20','NOV-20','DEC-20','JAN-21','FEB-21','MAR-21']

def rowTranformation(row):
    global master_data
    temp = pd.DataFrame(columns=new_colums)
    for i in range(12):
        val = []
        val.append(row[new_colums[0]])
        val.append(month_list[i])
        for j in new_colums[2:]:
            val.append(round(row[j]/12,2))
        temp.loc[i] = val
    master_data = master_data.append(temp,ignore_index=True)


data.apply(lambda x: rowTranformation(x),axis=1)
master_data.to_excel('output.xlsx',sheet_name='MonthlyView',index=False)