Как изменить строки на столбцы по дате в pandas?

#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’]