нарезка кадра данных pandas по диапазону дат

Я использую pandas для анализа финансовых отчетов.

У меня есть DataFrame, полученный из CSV-файла, который выглядит так:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 800 entries, 2010-10-27 00:00:00 to 2011-07-12 00:00:00
Data columns:
debit                      800  non-null values
transaction_type           799  non-null values
transaction_date_raw       800  non-null values
credit                     800  non-null values
transaction_description    800  non-null values
account_number             800  non-null values
sort_code                  800  non-null values
balance                    800  non-null values
dtypes: float64(3), int64(1), object(4)

Я выбираю подмножество на основе суммы транзакции:

c1 = df['credit'].map(lambda x: x > 1000)
milestones = df[c1].sort()

и хотите создать фрагменты исходного df на основе дат между вехами:

delta = dt.timedelta(days=1)
for i in range(len(milestones.index)-1):
        start = milestones.index[i].date()
        end = milestones.index[i+1].date() - delta
        rng = date_range(start, end)

это создает новую серию с датами между моими вехами.

<class 'pandas.tseries.index.DatetimeIndex'>
[2010-11-29 00:00:00,..., 2010-12-30 00:00:00]
Length: 32, Freq: D, Timezone: None

Я использовал несколько подходов к нарезке моего df, используя эти новые серии (rng ), но потерпел неудачу:

df.ix[start:end] or
df.ix[rng]

это вызывает :IndexError :недопустимый фрагмент

df.reindex(rng) or df.reindex(index=rng)

вызывает :Исключение :Переиндексация действительна только для объектов Index с уникальным значением

x = [v for v in rng if v in df.index]
df[x]
df.ix[x]
df.index[x]

это также вызывает неверный слайс, как и:

df.truncate(start, end)

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

6
задан piRSquared 4 January 2017 в 23:46
поделиться