Разделение значений в индексе кадра данных панд - PullRequest
1 голос
/ 12 марта 2019

У меня есть фрейм данных этого типа:

d = {'a': [100,150,180,190]}
df = pd.DataFrame(data=d, index=[(2010,1) ,(2010,2 ), (2011,1) ,(2011,2 )])

, который возвращает

Out[91]: 
             a
(2010, 1)  100
(2010, 2)  150
(2011, 1)  180
(2011, 2)  190

Моя задача - разделить значения в индексе и сделать фрейм данных более читаемым, сохранивинформация об индексе.Другими словами, мой ожидаемый результат таков:

dd = {'a': [100,150,180,190], 'year': [2010, 2011, 2010,2011], 'class': [1,2, 1,2]}
df2 = pd.DataFrame(data=dd)

Out[92]: 
     a  year  class
0  100  2010      1
1  150  2011      2
2  180  2010      1
3  190  2011      2

Любая помощь?

1 Ответ

1 голос
/ 12 марта 2019

Вы можете выбрать каждое значение кортежей с помощью индексации и последнего создания индекса по умолчанию на DataFrame.reset_index с drop=True:

df['year'] = df.index.str[0]
df['class'] = df.index.str[1]
df = df.reset_index(drop=True)
print (df)
     a  year  class
0  100  2010      1
1  150  2010      2
2  180  2011      1
3  190  2011      2

Другая идея заключается в создании нового DataFrame иприсоединиться к оригиналу:

df1 = pd.DataFrame(df.index.tolist(), columns=['year','class'], index=df.index)
df = df.join(df1).reset_index(drop=True)
print (df)
     a  year  class
0  100  2010      1
1  150  2010      2
2  180  2011      1
3  190  2011      2

Другая идея - создать MultiIndex с помощью MultiIndex.from_tuples:

df.index = pd.MultiIndex.from_tuples(df.index, names=['year','class'])
print (df)
              a
year class     
2010 1      100
     2      150
2011 1      180
     2      190

И затем возможно создать столбцы:

df = df.reset_index()
print (df)
   year  class    a
0  2010      1  100
1  2010      2  150
2  2011      1  180
3  2011      2  190
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...