#python #pandas #dataframe
Вопрос:
У меня есть фрейм данных csv-файла, который выглядит следующим образом:
Моя цель состоит в том, чтобы расплавить (преобразовать) фрейм данных в усовершенствованный фрейм данных, который выглядит следующим образом:
Это мой код до сих пор:
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