Панды - фильтрация данных по дням недели - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть Dataframe, в котором есть список дат с количеством продаж для каждого из дней, как показано ниже:

date,count
11/1/2018,345
11/2/2018,100
11/5/2018,432
11/7/2018,500
11/11/2018,555
11/17/2018,754

Я пытаюсь проверить все продажи, которые были сделаны, сколько было сделано набудний день.Чтобы вывести все дни недели в ноябре, я делаю следующее:

weekday = pd.DataFrame(pd.bdate_range('2018-11-01', '2018-11-30'))

Теперь я пытаюсь сравнить даты в df со значением в будний день, как показано ниже:

df_final = df[df['date'].isin(weekday)]

Новыше не возвращает строк.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Используйте DatetimeIndex и позвольте pandas выполнить работу за вас следующим образом:

# generate some sample sales data for the month of November
df = pd.DataFrame(
    {'count': np.random.randint(0, 900, 30)}, 
    index=pd.date_range('2018-11-01', '2018-11-30', name='date')
)

# resample by business day and call `.asfreq()` on the resulting groupby-like object to get your desired filtering
df.resample(rule='B').asfreq()

Другие значения для повторной выборки rule можно найти здесь

0 голосов
/ 11 декабря 2018

Вы должны удалить pd.DataFrame при создании дня недели, так как при использовании Series и DataFrame с isin означает, что мы сопоставляем не только values, но также index и columns, посколькуисходные index и columns могут отличаться от вновь созданного дня недели, поэтому возвращаем False

df.date=pd.to_datetime(df.date)
weekday = pd.bdate_range('2018-11-01', '2018-11-30')
df_final = df[df['date'].isin(weekday)]
df_final
Out[39]: 
        date  count
0 2018-11-01    345
1 2018-11-02    100
2 2018-11-05    432
3 2018-11-07    500

Простой пример решения проблемы, о которой я упоминал выше

df=pd.DataFrame({'A':[1,2,3,4,5]})
newdf=pd.DataFrame({'B':[2,3]})
df.isin(newdf)
Out[43]: 
       A
0  False
1  False
2  False
3  False
4  False
df.isin(newdf.B.tolist())
Out[44]: 
       A
0  False
1   True
2   True
3  False
4  False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...