Смещение индекса в кадре данных pandas (сохранить содержимое в неизменном виде) - PullRequest
0 голосов
/ 27 апреля 2018

Сценарий: У меня есть 2 кадра данных, у одного есть данные за период X, а у другого есть данные за период X-1 (может быть день или месяц).

Пример данных:

DF1 (time X):

                Item 1       Item 2
2018-01-02       0.431        0.656
2018-01-03       0.439        0.668
2018-01-04       0.447        0.680
2018-01-05       0.455        0.692
2018-01-08       0.479        0.729
2018-01-09       0.487        0.741
2018-01-10       0.495        0.753

DF1 (time X-1):

                Item 1       Item 2
2018-01-02       0.429        0.651
2018-01-03       0.431        0.656
2018-01-04       0.439        0.668
2018-01-05       0.447        0.680
2018-01-08       0.455        0.692
2018-01-09       0.479        0.729
2018-01-10       0.487        0.741

Я хочу, чтобы мой следующий кадр данных был:

X Final:
                Item 1       Item 2
2018-01-01       0.429        0.651
2018-01-02       0.431        0.656
2018-01-03       0.439        0.668
2018-01-04       0.447        0.680
2018-01-05       0.455        0.692
2018-01-08       0.479        0.729
2018-01-09       0.487        0.741
2018-01-10       0.495        0.753

То, что я уже пробовал: Сначала я пытался объединить последний столбец массива X с массивом x-1 и сместить индекс, но при этом я также сместил данные, что не то, что я хочу:

df_xfinal = df_x1.iloc[:]
df_xlastrow = df_x.iloc[-1:]
df_xfinal = df_xfinal.append(df_xlastrow)
df_xfinal = df_xfinal.shift(periods=-1, axis=0)

Вопрос: Можно ли сделать это простым способом, без сквозного цикла для всех элементов массива?

1 Ответ

0 голосов
/ 27 апреля 2018

Если я правильно понимаю:

# Make sure the indices are datetimes (if they aren't already)
DF1.index = pd.to_datetime(DF1.index)
DF2.index = pd.to_datetime(DF2.index)

# subtract a day from the index of df2
DF2.index = DF2.index - pd.Timedelta('1d')

# concatenate the two dataframes, sort by index, and drop duplicates
final_df = pd.concat([DF1, DF2]).sort_index().drop_duplicates()

Что возвращает:

>>> final_df
            Item 1  Item 2
2018-01-01   0.429   0.651
2018-01-02   0.431   0.656
2018-01-03   0.439   0.668
2018-01-04   0.447   0.680
2018-01-05   0.455   0.692
2018-01-08   0.479   0.729
2018-01-09   0.487   0.741
2018-01-10   0.495   0.753
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...