#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’]=»уменьшено»