Как изменить структуру данных с многолетними данными в Python - PullRequest
0 голосов
/ 15 ноября 2018

Я считаю, что мой вопрос можно решить с помощью цикла, но я не смог создать такой. У меня есть образец данных, который выглядит следующим образом образец данных

И я хотел бы иметь таблицу данных, которая будет организована к году: данные результата

Я попробовал сводную функцию, создав столбец года с df ['year'] = df.index.year, а затем изменив форму с помощью pivot, но он будет заполнен только первым столбцом года из-за индекса.

Мне удалось сделать этот тип изменения формы вручную, но с данными за несколько лет это трудоемкое решение. Вот пример кода для ручного решения:

mydata = pd.DataFrame()
mydata2 = pd.DataFrame()
mydata3 = pd.DataFrame()
mydata1['1'] = df['data'].iloc[160:664]
mydata2['2'] = df['data'].iloc[2769:3273]
mydata3['3'] = df['data'].iloc[5583:6087]
mydata1.reset_index(drop=True, inplace=True)
mydata2.reset_index(drop=True, inplace=True)
mydata3.reset_index(drop=True, inplace=True)
mydata = pd.concat([mydata1, mydata2, mydata3],axis=1, ignore_index=True)
mydata.columns = ['78','88','00','05']

1 Ответ

0 голосов
/ 15 ноября 2018

Добро пожаловать в StackOverflow! Мне кажется, я поняла, что вы просили по вашему вопросу, но, пожалуйста, поправьте меня, если я не прав. По сути, вы хотите изменить свою текущую pandas.DataFrame с помощью разворота. Я установил образец набора данных и решил проблему следующим образом:

import pandas as pd

#test set
df = pd.DataFrame({'Index':['2.1.2000','3.1.2000','3.1.2001','4.1.2001','3.1.2002','4.1.2002'],
                   'Value':[100,101,110,111,105,104]})

#create a year column for yourself
#by splitting on '.' and selecting year element.
df['Year'] = df['Index'].str.split('.', expand=True)[2]

#pivot your table
pivot = pd.pivot_table(df, index=df.index, columns='Year', values='Value')

#now, in my pivoted test set there should be unwanted null values showing up so
#we can apply another function that drops null values in each column without losing values in other columns
pivot = pivot.apply(lambda x: pd.Series(x.dropna().values))

Результат на моем конце

| Year | 2000 | 2001 | 2002 |
|------|------|------|------|
| 0    | 100  | 110  | 105  |
| 1    | 101  | 111  | 104  |

Надеюсь, это решит вашу проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...