Один слой для использования ОЗУ с только зависимостью stdlib:
import os
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])
Если я понимаю, что вы ищете: найдите (значение индекса, расположение столбца) значения в кадре данных. Вы можете использовать понимание списка в цикле. Вероятно, не будет самым быстрым, если ваш фрейм данных большой.
# assume this dataframe
df = pd.DataFrame({'col':['abc', 'def','wert','abc'], 'col2':['asdf', 'abc', 'sdfg', 'def']})
# list comprehension
[(df[col][df[col].eq('abc')].index[i], df.columns.get_loc(col)) for col in df.columns for i in range(len(df[col][df[col].eq('abc')].index))]
# [(0, 0), (3, 0), (1, 1)]
измените df.columns.get_loc
на col
, если хотите указать значение столбца, а не местоположение:
[(df[col][df[col].eq('abc')].index[i], col) for col in df.columns for i in range(len(df[col][df[col].eq('abc')].index))]
# [(0, 'col'), (3, 'col'), (1, 'col2')]
Интересный вопрос. Я также использовал понимание списка, но с np.where
. Тем не менее, я был бы удивлен, если бы не было менее неуклюжий путь.
df = pd.DataFrame({'column_1':['a','c'], 'column_2':['b','d']}, index=[1,2])
[(i, np.where(df[i] == 'd')[0].tolist()) for i in list(df) if len(np.where(df[i] == 'd')[0]) > 0]
> [[('column_2', [1])]
Обратите внимание, что он возвращает числовой индекс (на основе 0), а не пользовательский индекс (на основе 1). Если у вас есть фиксированное смещение, вы можете просто добавить +1
или что-то еще к выводу.