#python #pandas
#python #pandas
Вопрос:
У меня есть файл данных csv в следующем формате, я хочу изменить строки на столбцы, но это преобразование должно выполняться для каждого запаса и для каждой даты.
Ticker,Indicator,Date,Value
STOCK A,ACCRUALS,3/31/2005,-10.44
STOCK A,ACCRUALS,3/31/2006,0.44
STOCK A,AE,3/31/2005,3.97
STOCK A,AE,3/31/2006,3.67
STOCK A,ASETTO,3/31/2005,0.762
STOCK A,ASETTO,3/31/2006,0.9099
Вывод
Ticker,Date,ACCRUALS,AE,ASETTO
STOCK A,3/31/2005,-10.44,3.97,0.762
STOCK A,3/31/2006,0.44,3.67,0.9099
Ответ №1:
Ticker,Indicator,Date,Value
STOCK A,ACCRUALS,3/31/2005,-10.44
STOCK A,ACCRUALS,3/31/2006,0.44
STOCK A,AE,3/31/2005,3.97
STOCK A,AE,3/31/2006,3.67
STOCK A,ASETTO,3/31/2005,0.762
STOCK A,ASETTO,3/31/2006,0.9099
Давайте просто скажем, что ваши данные находятся в dataframe с именем df
:
>>> import pandas as pd
>>> df = df.set_index(df['Date'])
>>> for ind in set(df['Indicator']):
... filtered_df = df[df['Indicator'] == ind]
... df[ind] = filtered_df['Value']
...
>>> cols_to_keep = ['Ticker', 'Date'] list(set(df['Indicator']))
>>> trimmed_df = df[cols_to_keep]
>>> trimmed_df = trimmed_df.drop_duplicates()
>>> trimmed_df
Ticker Date ACCRUALS AE ASETTO
Date
3/31/2005 STOCK A 3/31/2005 -10.44 3.97 0.7620
3/31/2006 STOCK A 3/31/2006 0.44 3.67 0.9099
Это должно принимать каждое уникальное значение для df['Indicator']
и создавать новый столбец из df['Value']
столбца для этого конкретного показателя.
Вы можете использовать reset_index()
для установки индексов фрейма данных обратно на ноль:
>>> trimmed_df.reset_index(drop = True)
И вместо использования cols_to_keep
вы можете сделать:
>>> trimmed_df.drop("Indicator", axis = 1, inplace = True)
Комментарии:
1. df = df.set_index(df[‘Date’]) выдает ошибку, вызывающую KeyError(«Нет столбцов с именем: %s» % str(ключ [маска]))
2. Когда я изменил его на df = df.set_index([‘Date’]) , он выдает исключение с ошибкой (‘Index имеет дубликаты ключей: %s’ % duplicates) Исключение: Index имеет дубликаты ключей: [‘3/31/2005’, ‘3/31/2006’]