У меня есть pandas DataFrame, df_test
. Он содержит столбец "размер", который представляет размер в байтах. Я вычислил KB, MB и GB, используя следующий код:
df_test = pd.DataFrame([
{'dir': '/Users/uname1', 'size': 994933},
{'dir': '/Users/uname2', 'size': 109338711},
])
df_test['size_kb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0, grouping=True) + ' KB')
df_test['size_mb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0 ** 2, grouping=True) + ' MB')
df_test['size_gb'] = df_test['size'].astype(int).apply(lambda x: locale.format("%.1f", x / 1024.0 ** 3, grouping=True) + ' GB')
df_test
dir size size_kb size_mb size_gb
0 /Users/uname1 994933 971.6 KB 0.9 MB 0.0 GB
1 /Users/uname2 109338711 106,776.1 KB 104.3 MB 0.1 GB
[2 rows x 5 columns]
Я запустил это более 120 000 строк и времени, затрачивая около 2,97 секунды на столбец * 3 = ~ 9 секунд в зависимости от% timeit.
Есть ли способ сделать это быстрее? Например, могу ли я вместо того, чтобы возвращать один столбец за один раз из приложения и запускать его 3 раза, могу ли я вернуть все три столбца за один проход, чтобы вставить обратно в исходный фрейм?
Другие вопросы, которые я нашел, все хотят принимать несколько значений и возвращать одно значение. Я хочу взять одно значение и вернуть несколько столбцов.