2013-09-04 2 views
17

Я создал Series из DataFrame, когда я повторно создаются некоторые данные с числом как так: где H2 является DataFrame:Панды сбросить индекс на серии, чтобы удалить мультииндексные

H3=H2[['SOLD_PRICE']] 
    H5=H3.resample('Q',how='count') 
    H6=pd.rolling_mean(H5,4) 

Это дало ряд, который выглядит как это:

1999-03-31 SOLD_PRICE  NaN 
1999-06-30 SOLD_PRICE  NaN 
1999-09-30 SOLD_PRICE  NaN 
1999-12-31 SOLD_PRICE 3.00 
2000-03-31 SOLD_PRICE 3.00 

с индексом, который выглядит как:

MultiIndex 
[(1999-03-31 00:00:00, u'SOLD_PRICE'), (1999-06-30 00:00:00, u'SOLD_PRICE'), (1999-09-30 00:00:00, u'SOLD_PRICE'), (1999-12-31 00:00:00, u'SOLD_PRICE'),..... 

Я не хочу, чтобы второй столбец был индексом. В идеале у меня бы был DataFrame, а столбец 1 - как «Дата» и столбец 2 как «Продажи» (отбрасывание второго уровня индекса). Я не совсем понимаю, как перенастроить индекс.

+3

Просто замечание общего порядка: именовании переменных с указанием номера заказа, в котором вы используете их является путь к катастрофе. Рассмотрим патологический случай, когда 'pandas' не имел' DataFrame' или 'Series', и они были просто названы' DataStructure1' и 'DataStructure2', и все их методы были просто названы' method1', 'method2' и т. Д. , Предоставление вашим переменным значимых имен сделает ваш код разборчивым для других, читающих его в первый раз. Предоставление значимых имен вашим переменным также позволяет * вы * вернуться к вашему коду через месяц и быстро вернуться к скорости. –

+0

Хороший совет, Еще раз спасибо – dartdog

ответ

30

Просто позвоните reset_index():

In [130]: s 
Out[130]: 
0   1 
1999-03-31 SOLD_PRICE NaN 
1999-06-30 SOLD_PRICE NaN 
1999-09-30 SOLD_PRICE NaN 
1999-12-31 SOLD_PRICE  3 
2000-03-31 SOLD_PRICE  3 
Name: 2, dtype: float64 

In [131]: s.reset_index() 
Out[131]: 
      0   1 2 
0 1999-03-31 SOLD_PRICE NaN 
1 1999-06-30 SOLD_PRICE NaN 
2 1999-09-30 SOLD_PRICE NaN 
3 1999-12-31 SOLD_PRICE 3 
4 2000-03-31 SOLD_PRICE 3 

Есть много способов, чтобы удалить столбцы:

вызов reset_index() дважды и указать столбец:

In [136]: s.reset_index(0).reset_index(drop=True) 
Out[136]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

Удалить столбец после сброса индекса:

In [137]: df = s.reset_index() 

In [138]: df 
Out[138]: 
      0   1 2 
0 1999-03-31 SOLD_PRICE NaN 
1 1999-06-30 SOLD_PRICE NaN 
2 1999-09-30 SOLD_PRICE NaN 
3 1999-12-31 SOLD_PRICE 3 
4 2000-03-31 SOLD_PRICE 3 

In [139]: del df[1] 

In [140]: df 
Out[140]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

Вызов drop() после сброса:

In [144]: s.reset_index().drop(1, axis=1) 
Out[144]: 
      0 2 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31 3 
4 2000-03-31 3 

Затем, после того, как вы сбросить индекс, просто переименовать столбцы

In [146]: df.columns = ['Date', 'Sales'] 

In [147]: df 
Out[147]: 
     Date Sales 
0 1999-03-31 NaN 
1 1999-06-30 NaN 
2 1999-09-30 NaN 
3 1999-12-31  3 
4 2000-03-31  3 
13

При использовании двойных скобок, например

H3 = H2[['SOLD_PRICE']] 

H3 становится DataFrame. Если вы используете отдельные скобы,

H3 = H2['SOLD_PRICE'] 

затем H3 становится серией. Если H3 является серия, то результат вы хотите естественно вытекает:

import pandas as pd 
import numpy as np 
rng = pd.date_range('1/1/2011', periods=72, freq='M') 
H2 = pd.DataFrame(np.arange(len(rng)), index=rng, columns=['SOLD_PRICE']) 
H3 = H2['SOLD_PRICE'] 
H5 = H3.resample('Q', how='count') 
H6 = pd.rolling_mean(H5,4) 
print(H6.head()) 

дает

2011-03-31 NaN 
2011-06-30 NaN 
2011-09-30 NaN 
2011-12-31  3 
2012-03-31  3 
dtype: float64 
+0

+1 Элегантный, как обычно :) –

+0

Мне это нравится !! Трудно выбрать ... Оба вы похожи на ангелов, сидящих на моем плече, так как я изо всех сил стараюсь встать на ноги. Именно такие люди, как вы, делают сообщество Python настолько отличным для новичков.Спасибо + unutbu и + Phillip Cloud – dartdog

+0

Я считаю, что это решение, которое я использую, но мне также нужно понять, как лучше манипулировать объектом серии, который объясняет Филипп. – dartdog

Смежные вопросы