Вы можете использовать numpy.modf
для извлечения чисел с плавающими частями fractional
и integral
и округлять только часть fractional
, добавьте в последний раз:
df = pd.DataFrame([110100.0, 1.0, 1.12345678], dtype=np.float32, columns=['col'])
a, b = np.modf(df['col'])
print (b + np.round(a, 7))
0 110100.000000
1 1.000000
2 1.123457
Name: col, dtype: float32
Другое решение умножить на число для округления, преобразовать в целое число и разделить:
val = 10**7
print (df['col'].mul(val).astype(np.int64).div(val))
0 110100.000000
1 1.000000
2 1.123457
Name: col, dtype: float64
Это - то, как я мог бы смоделировать его. Я не учел таблицу Revisions и таблицу Files, поскольку это должно быть довольно очевидным.
CREATE TABLE Revision_Files
(
start_revision_number INT NOT NULL,
end_revision_number INT NOT NULL,
file_number INT NOT NULL,
value INT NOT NULL,
CONSTRAINT PK_Revision_Files PRIMARY KEY CLUSTERED (start_revision_number, file_number),
CONSTRAINT CHK_Revision_Files_start_before_end CHECK (start_revision_number <= end_revision_number)
)
GO
Для получения всех значений для файлов конкретного пересмотра, Вы могли использовать следующий запрос. Соединение с таблицей файлов с внешним объединением позволило бы Вам получить тех, которые не имеют никакого определенного значения для того пересмотра.
SELECT
REV.revision_number,
RF.file_number,
RF.value
FROM
Revisions REV
INNER JOIN Revision_Files RF ON
RF.start_revision_number <= REV.revision_number AND
RF.end_revision_number >= REV.revision_number
GO
Предположение, что я понимаю правильно, что Вы хотите в своей третьей точке, это позволит Вам получить все изменения, для которых конкретный файл имеет определенное значение:
SELECT
REV.revision_number
FROM
Revision_Files RF
INNER JOIN Revisions REV ON
REV.revision_number BETWEEN RF.start_revision_number AND RF.end_revision_number
WHERE
RF.file_number = @file_number AND
RF.value = @value
GO