Панды Таят проблемы в Python

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных csv-файла, который выглядит следующим образом:

ФРЕЙМ ДАННЫХ содержит 2892 строки, которые в сумме дают около 72 имен TCA:

Моя цель состоит в том, чтобы расплавить (преобразовать) фрейм данных в усовершенствованный фрейм данных, который выглядит следующим образом:

Как должен выглядеть новый фрейм данных

Это мой код до сих пор:

 import glob, pandas as pd



file =  r"C:UsersjriveraOneDrive - Accelerate ResourcesDocumentsPythonmaverickAvgTCProductionInput.csv"

dfTotal = pd.DataFrame()

for prd in glob.glob(file):
    df = pd.read_csv(prd)
    dfTotal = pd.concat([dfTotal, df])
dfTotal.shape

dfHDprd = pd.read_csv(r"C:UsersjriveraOneDrive - Accelerate ResourcesDocumentsPythonmaverickAvgTCProductionInput.csv")

id_vars, dct = ["TCA","MONTH",],{}

for x in ["OIL", "GAS"]:
    dct["value_vars_%s" % x] = ["NORM_%s"%x]

dfNew = pd.melt(frame = dfHDprd, id_vars = ["TCA", "MONTHS"], value_vars = ["NORM_OIL_1KFT", "NORM_GAS_1KFT"], var_name= "OIL", var_value = "GAS")
 

Ответ №1:

Я не совсем уверен, какова ваша цель, по ссылке просто кажется, что вы хотите ограничить месяцы между 0-3 и удалить некоторые столбцы. Я бы предложил прямо объяснить, что вам нужно.

pd.melt используется для преобразования широкого фрейма данных в длинный фрейм данных путем «плавления» столбцов, при этом имена переменных (NORM_OIL_1KFT, NORM_GAS_1KFT) вводятся в строки вместо заголовков столбцов. Я не думаю, что это то, что вы ищете.

Если вы просто хотите сохранить только столбцы в нужном кадре данных:

 new_df = dfHDprd[['TCA','MONTH','NORM_OIL_1KFT','NORM_GAS_1KFT']]
new_df.columns = ['TCA','MONTH','OIL','GAS']
 

Плавление фрейма данных (что, вероятно, не то, что вы хотите сделать), вам нужно будет переопределить свое выражение таким образом, чтобы понять цель плавления:

 dfNew = pd.melt(frame = dfHDprd, id_vars = ["TCA", "MONTHS"], value_vars = ["NORM_OIL_1KFT", "NORM_GAS_1KFT"], var_name= "FUEL_TYPE", var_value = "QUANTITY")
 

Где var_name-это заголовок столбца, отличающий переменные, которые попадают во фрейм данных, а var_valueэто заголовок столбца, который является меткой для значений.

Тривиальный пример (поскольку я не могу скопировать какие-либо ваши данные):

 df = pd.DataFrame({'id':['a','b','c'], 'C1':[1,2,3],'C2':[4,5,6],'C3':[5,6,7]})

>>>

    id  C1  C2  C3
0   a   1   4   5
1   b   2   5   6
2   c   3   6   7

pd.melt(frame=df, id_vars=['id'], value_vars=['C1','C2','C3'], value_name='value', var_name='variable')

>>>
    id  variable value
0   a   C1         1
1   b   C1         2
2   c   C1         3
3   a   C2         4
4   b   C2         5
5   c   C2         6
6   a   C3         5
7   b   C3         6
8   c   C3         7