Вставить ряд значений в pd.dataframe случайным образом

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня большой фрейм данных, и то, что я хочу сделать, это перезаписать X записей этого фрейма данных новым значением, которое я установил. Новые записи должны располагаться в случайном положении, но они должны быть в порядке. Например, у меня есть столбец со случайными числами, и я хочу перезаписать 20 из них подряд новым значением x.

Я попытался df.sample(x) , а затем обновить dataframe, но я получаю только отдельные записи. Но мне нужны X новых записей подряд (последовательно).

У кого-нибудь есть решение? Я совсем новичок в Python и должен изучить его для своей магистерской диссертации.

УТОЧНЕНИЕ:

Мой dataframe содержит 5 столбцов с почти 60 000 строк, каждая строка в течение 10 минут в году.

  • Один столбец является «выходным» со значениями выработки электроэнергии за эти 10 минут.
  • В течение 2 часов подряд (120 минут подряд, следовательно, 12 последовательных строк) в году я хочу снизить это производство до 60%. Я хочу, чтобы это произошло в случайное время года.
  • Другой столбец — «статус», содержащий информацию о том, сокращено производство или нет.

Я пытался:

 df_update = df.sample(12)
df_update.status = 'reduced'
df.update(df_update)
df.loc[('status) == 'reduced', ['production']] *=0.6 
  

что делает трюк за общее количество времени (12 * 10 минут), но я хочу 120 минут подряд и не разделяться.

Комментарии:

1. Не могли бы вы предоставить пример ввода и каким будет ваш ожидаемый результат

2. Ключевая фраза — «120 минут подряд» или «12 последовательных строк».

Ответ №1:

Я решил получить случайное значение и просто проиндексировать следующие 12 записей равными 0,6. Я думаю, это то, что вы хотите.

 df = pd.DataFrame({'output':np.random.randn(20),'status':[0]*20})
idx = df.sample(1).index.values[0]
df.loc[idx:idx 11,"output"]=0.6
df.loc[idx:idx 11,"status"]=1
  

Комментарии:

1. Нет проблем, если вы хотите делать это для каждого года, я бы рекомендовал разбивать каждый год на отдельные фреймы данных. В противном случае вам понадобится новый idx для каждого года, и это может привести к тому, что df.loc[idx:idx 11, :] будет запущен в следующем году. Все будет так, если все в порядке, тогда все готово

2. Еще одна вещь: если я хочу установить эти 2 часа на определенное время года, как бы я использовал этот idx? У меня также есть столбец с именем ‘time’. Итак, могу ли я просто установить: python idx = df['time']='xx'.index.values[0] python и сделать то же самое?

3. Вы имеете в виду, что хотите выбрать случайный индекс в подмножестве года?

4. Нет, на этот раз ничего случайного. Я установил для одной строки статуса значение «уменьшено», используя df.loc[(df[‘time’]==’01.01.2017 00:10′), [‘ статус’]] = ‘уменьшен’ и хотите также установить следующие 12 строк как ‘уменьшенные’.

5. Я бы сделал то же самое, что и выше, за исключением поиска idx для любого места, которое вы хотите установить. В этом случае это было бы idx=df[время df[»]==’01.01.2017 00:10′]]. index.values[0], тогда вы можете просто использовать df.loc[idx:idx 11,’status’]=»уменьшено»