У меня есть датафрейм, который выглядит так:
Date Day
1 y-m-d MON
2 y-m-d TUE
3 y-m-d WED
...
Вы можете воссоздать это:
dict_weekday = {1: 'MON', 2: 'TUE', 3: 'WED', 4: 'THU', 5: 'FRI', 6: 'SAT', 7: 'SUN'}
df = pd.DataFrame(pd.date_range(datetime.date(2018, 1, 1),
datetime.date(2019, 1, 1), freq='D'), columns=['Date'])
df['Day'] = df['Date'].apply(lambda x: dict_weekday[x.isoweekday()])
Как мне создать новый столбец, который использует np.random.poisson(30)
MON-FRI
, но затем использует np.random.poisson(1)
для SAT
&
SUN
?
На данный момент я пытаюсь использовать np.select
для выполнения моих условий и выбора:
conditions = [
(df['Day'] == 'SAT'),
(df['Day'] == 'SUN')
]
choices = [np.random.poisson(1), np.random.poisson(1)] #I wish this part was cleaner
for index, row in df.iterrows():
df['New'] = np.select(conditions, choices, default = np.random.poisson(30)
Код выше приведен в другом посте:
Pandas условное создание столбца серии / кадра данных
... и это очень близко, но я не знаю, как сохранить целостность индекса при циклическом цикле, я думаю, в чем проблема (?). Вот что я получаю:
Date Day New
1 y-m-d MON 34
2 y-m-d TUE 34
3 y-m-d WED 34
...
6 y-m-d SAT 2
7 y-m-d SUN 1
8 y-m-d MON 34
9 y-m-d TUE 34
10 y-m-d WED 34
Я хочу, чтобы New
был массивом чисел, случайно сгенерированным из распределения Пуассона. С понедельника по пятницу следует то же распределение, но числа субботы и воскресенья значительно меньше. Я думаю, что понимаю, почему мой код не моделирует то, что я хочу, но у меня нет опыта, чтобы знать, как это исправить.
Я также рассмотрел полное исключение даты и просто построение массива, который следует последовательности, которую я хочу, используя разрывы и продолжение в цикле, но я не смог найти воспроизводимый пример, который бы подходил моему случаю.
Надеюсь, все это имеет смысл ... это мой первый пост, поэтому я прошу прощения заранее, если я не следую ТАК передовым методам.