В моем случае у нас есть временные ряды с разных устройств, но некоторые устройства не могли отправить какое-либо значение в течение некоторого периода времени. Таким образом, мы должны создавать значения NA для каждого устройства и период времени, а затем делать fillna.
df = pd.DataFrame([["device1", 1, 'first val of device1'], ["device2", 2, 'first val of device2'], ["device3", 3, 'first val of device3']])
df.pivot(index=1, columns=0, values=2).fillna(method='ffill').unstack().reset_index(name='value')
Результат:
0 1 value
0 device1 1 first val of device1
1 device1 2 first val of device1
2 device1 3 first val of device1
3 device2 1 None
4 device2 2 first val of device2
5 device2 3 first val of device2
6 device3 1 None
7 device3 2 None
8 device3 3 first val of device3
Это не то, что вы можете сделать в C, не сохраняя информацию самостоятельно. Вы создали массивы, поэтому в какой-то момент вы знали их размеры, вам просто нужно их отслеживать самостоятельно. Вы можете создать структуру данных, которая поможет вам, или просто сохранить информацию о массиве и размере без какой-либо структуры данных.
Кроме того, ваш код использует strlen()
для получения размера строки - убедитесь, что вы помните, что возвращенный размер не будет содержать завершающий нулевой символ ('\0'
); размер памяти в строковой константе равен strlen(string) + 1
.
Указатель указывает только на то, где начинаются данные. Он ничего не знает о размере данных.
sizeof
знает только полный размер массива, если это статически известно во время компиляции. Для указателя он вернет размер адреса памяти, т. Е. 4 на 32-битном, 8 на 64-битном.
Когда вы используете указатели, вам нужно знать и отслеживать размер данных, на которые он указывает. Реализация языка не будет делать это для вас, как для массивов.
Нет стандартного способа сделать это. Вы должны сохранить длину выделенной памяти в другой переменной или использовать «контейнер», который отслеживает вас.
На некоторых платформах есть функции для поиска количества байтов в распределении, например. Symbian как функция AllocSize(ptr)
.
CreateDIBSection
и что он должен делать с этим вопросом? – Carl Norum 13 January 2015 в 23:06