Как подсчитать общее количество дней в pandas фрейме данных - PullRequest
0 голосов
/ 20 июня 2020

У меня есть столбец df с датами и часами / минутами:

0   2019-09-13 06:00:00
1   2019-09-13 06:05:00
2   2019-09-13 06:10:00
3   2019-09-13 06:15:00
4   2019-09-13 06:20:00
Name: Date, dtype: datetime64[ns]

Мне нужно подсчитать, сколько дней содержит фрейм данных.

Я пробовал вот так:

sample_length = len(df.groupby(df['Date'].dt.date).first())

и

sample_length = len(df.groupby(df['Date'].dt.date))

Но число, которое я получаю, кажется неправильным. Знаете ли вы другой способ подсчета дней?

Ответы [ 3 ]

1 голос
/ 20 июня 2020

Я не совсем уверен, что вы хотите здесь делать. Вы хотите подсчитать количество уникальных дней (понедельник / вторник / ...), месячных дат (1-31 i sh), годовых дат (1-365) или уникальные даты (уникальные дни с начала времен)?

Из серии pandas вы можете использовать {series}.value_counts(), чтобы получить количество записей для каждого уникального значения, или просто получить все уникальные значения с помощью {series}.unique()

import pandas as pd
df = pd.DataFrame(pd.DatetimeIndex(['2016-10-08 07:34:13', '2015-11-15 06:12:48',
               '2015-01-24 10:11:04', '2015-03-26 16:23:53',
               '2017-04-01 00:38:21', '2015-03-19 03:47:54',
               '2015-12-30 07:32:32', '2015-11-10 20:39:36',
               '2015-06-24 05:48:09', '2015-03-19 16:05:19'],
              dtype='datetime64[ns]', freq=None), columns = ["date"])

дней (понедельник / вторник /...):

df.date.dt.dayofweek.value_counts()

даты в месяц (1-31 i sh )

df.date.dt.day.value_counts()

годовые даты (1-365)

df.date.dt.dayofyear.value_counts()

уникальные даты (уникальные дни с начала времен)

df.date.dt.date.value_counts()

Чтобы получить количество уникальных записей из любого из вышеперечисленных, просто добавьте .shape[0]

1 голос
/ 20 июня 2020

Рассмотрите примерные даты:

sample = pd.date_range('2019-09-12 06:00:00', periods=50, freq='4h')
df = pd.DataFrame({'date': sample})

                  date
0  2019-09-12 06:00:00
1  2019-09-12 10:00:00
2  2019-09-12 14:00:00
3  2019-09-12 18:00:00
4  2019-09-12 22:00:00
5  2019-09-13 02:00:00
6  2019-09-13 06:00:00
...
47 2019-09-20 02:00:00
48 2019-09-20 06:00:00
49 2019-09-20 10:00:00

Используйте, DataFrame.groupby, чтобы сгруппировать фрейм данных на df['date'].dt.date и используйте функцию aggregate GroupBy.size:

count = df.groupby(df['date'].dt.date).size()

# print(count)
date
2019-09-12    5
2019-09-13    6
2019-09-14    6
2019-09-15    6
2019-09-16    6
2019-09-17    6
2019-09-18    6
2019-09-19    6
2019-09-20    3
dtype: int64
0 голосов
/ 20 июня 2020
import pandas as pd
df = pd.DataFrame({'Date': ['2019-09-13 06:00:00',
                            '2019-09-13 06:05:00',
                            '2019-09-13 06:10:00',
                            '2019-09-13 06:15:00',
                            '2019-09-13 06:20:00']
                   },
                   dtype = 'datetime64[ns]'
                  )

df = df.set_index('Date')
_count_of_days = df.resample('D').first().shape[0]
print(_count_of_days)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...