Панды: заполнение новых столбцов из значений других столбцов - PullRequest
0 голосов
/ 29 октября 2018

У меня есть pandas.dataframe отчетов SEC для нескольких тикеров и периодов.

Воспроизводимый диктофон для DF:

{'Unnamed: 0': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4},
 'field': {0: 'taxonomyid',
  1: 'cik',
  2: 'companyname',
  3: 'entityid',
  4: 'primaryexchange'},
 'value': {0: '50',
  1: '0000023217',
  2: 'CONAGRA BRANDS INC.',
  3: '6976',
  4: 'NYSE'},
 'ticker': {0: 'CAG', 1: 'CAG', 2: 'CAG', 3: 'CAG', 4: 'CAG'},
 'cik': {0: 23217, 1: 23217, 2: 23217, 3: 23217, 4: 23217},
 'dcn': {0: '0000023217-18-000009',
  1: '0000023217-18-000009',
  2: '0000023217-18-000009',
  3: '0000023217-18-000009',
  4: '0000023217-18-000009'},
 'fiscalyear': {0: 2019, 1: 2019, 2: 2019, 3: 2019, 4: 2019},
 'fiscalquarter': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1},
 'receiveddate': {0: '10/2/2018',
  1: '10/2/2018',
  2: '10/2/2018',
  3: '10/2/2018',
  4: '10/2/2018'},
 'periodenddate': {0: '8/26/2018',
  1: '8/26/2018',
  2: '8/26/2018',
  3: '8/26/2018',
  4: '8/26/2018'}}

Столбец 'field' содержит название поля отчетности (например, Indicator), а столбец 'value' содержит значение для этого индикатора. Другие столбцы - это описание подачи в SEC (тикер + date + fiscal_periods = уникальный набор функций для описания определенной подачи). На одну подачу приходится около 60-70 показателей (количество варьируется).

С помощью приведенного ниже кода мне удалось создать сводный фрейм данных со столбцами = функциями (скажем, общее количество N для 1 представления). Но длина этого фрейма данных также равна числу индикаторов = N с NaN в недиагональных местах.

# Adf - Initial dataframe
c = Adf.pivot(columns='field', values='value')
d = Adf[['ticker','cik','fiscalyear','fiscalquarter','dcn','receiveddate','periodenddate']]
e = pd.concat([d, c], sort=False, axis=1)

Я хочу использовать имена индикаторов из «поля» в качестве новых столбцов (переход от узкого к широкому формату). В конце я хочу иметь фрейм данных с 1 строкой для каждого из отчетов SEC. Таким образом, ожидаемый результат для предоставленного примера - это 1-строчный фрейм данных с N новыми столбцами, где N = количество уникальных индикаторов из столбца 'field' исходного фрейма данных:

{'ticker': {0: 'CAG'},
 'cik': {0: 23217},
 'dcn': {0: '0000023217-18-000009'},
 'fiscalyear': {0: 2019},
 'fiscalquarter': {0: 1},
 'receiveddate': {0: '10/2/2018'},
 'periodenddate': {0: '8/26/2018'},
 'taxonomyid':{0:'50'},
 'cik': {0: '0000023217}',
 'companyname':{0: 'CONAGRA BRANDS INC.'},
 'entityid':{0:'6976'},
 'primaryexchange': {0:'NYSE'},

}

Как правильно создать такие столбцы или как очистить результирующий кадр данных от нескольких NaN?

1 Ответ

0 голосов
/ 29 октября 2018

Что мне помогло, так это установить новый индекс в DF и развернуть столбцы 'field' и 'value'

aa = Adf.set_index(['ticker','cik', 'fiscalyear','fiscalquarter',  'dcn','receiveddate', 'periodenddate', 'field']).unstack()
aa = aa.reset_index()
...