Есть ли способ проверить, появляется ли определенное значение каждую неделю, используя Python? - PullRequest
0 голосов
/ 16 июня 2020

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

Изображение показывает снимок того, как выглядит набор данных, но фактический набор данных имеет около 1563 городов:

[image[1]

Я хочу проверить, появляется ли, скажем, Хараре постоянно в течение нескольких недель и одинаково для всех других городов (из них 1562).

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Предполагая, что каждый город может появиться только один раз в заданную дату, один из вариантов - использовать технику реляционного деления:

select city
from mytable
group by city
having count(*) = (select count(distinct week) from mytable)

Это дает вам все города, которые появляются для всех дат. 1005 * Если данный город может появиться более одного раза в указанную дату, мы можем слегка изменить предложение having:

having count(distinct week) = (select count(distinct week) from mytable)
1 голос
/ 16 июня 2020

Предполагая, что он хранится во фрейме данных Panda (с именем df):

no_of_weeks = len(set(df['Week']))
check = pd.DataFrame(df.groupby('City').Week.apply(lambda x: x.count() == no_of_weeks))
always_recorded = pd.DataFrame({'City': check.index.values, 'always_recorded': check['Week']})
always_recorded.index = [*range(1, len(always_recorded)+1)]
df2 = pd.merge(df, always_recorded, how = "left", on = "City")
subset = df2[df2.always_recorded == True]
0 голосов
/ 16 июня 2020

Одним из возможных решений может быть подсчет количества недель для каждого города и сопоставление подсчета с номером текущей недели.

В SQL вы можете сделать что-то вроде

select 
   city, 
   count(week) over (partition by city) as appearance_num
from table_name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...