2014-01-27 4 views
0
df = pd.DataFrame([1,1,1,1], index=pd.date_range('1/1/2013',periods=4)) 
print df 
      0 
2013-01-01 1 
2013-01-02 1 
2013-01-03 1 
2013-01-04 1 

Как переиндексировать DataFrame, указав индекс 0, и пусть он автоматически заполнит остальные индексы? Например, если я указать индекс последнего элемента, чтобы быть 0, то я должен иметь следующее:Как переиндексировать центр, определяющий dataframe

0 
-3 1 
-2 1 
-1 1 
0 1 

Редактировать

Вместо указания номера строки, я хочу, чтобы указать цель дата для индекса 0.

ответ

2

Будет ли это работать? Я предполагаю, что вы отбрасываете свой текущий индекс и переключаетесь на целые индексы.

In [132]: df = pd.DataFrame([1,1,1,1], index=pd.date_range('1/1/2013',periods=4)) 

In [133]: target_zero_row = df.index.get_loc('2013-01-04') 

In [134]: df.index = pd.np.arange(df.shape[0]) - target_zero_row 

In [135]: df 
Out[135]: 
    0 
-3 1 
-2 1 
-1 1 
0 1 

[4 rows x 1 columns] 

Вы можете достичь того же этот путь, тоже:

In [180]: df = pd.DataFrame([1,1,1,1], index=pd.date_range('1/1/2013',periods=4)) 

In [181]: target_zero_row = df.index.get_loc('2013-01-04') 

In [182]: df.reset_index(drop=True, inplace=True) 

In [183]: df.index = df.index + (-target_zero_row) 

In [184]: df 
Out[184]: 
    0 
-3 1 
-2 1 
-1 1 
0 1 

[4 rows x 1 columns] 
+0

Спасибо за помощь @acowlikeoject. Я обновил свой вопрос, как бы вы решили решить мое новое требование? – zsljulius

+1

@zsljulius Это работает? Добавлен другой метод, который показывает, что вы действительно просто отбрасываете индекс и добавляете/вычитаете по мере необходимости, чтобы переиндексировать 0 в нужной строке. – capitalistcuttle

+0

@acowlikeoject, вы потрясающий. Это именно то, что мне нужно – zsljulius

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