У меня есть фрейм данных, созданный путем извлечения данных из источника (беспроводной контроллер сети).
Фрейм данных создан из словаря, который я строю.Это в основном то, что я делаю (пример для демонстрации структуры, а не фактический фрейм данных):
df = pd.DataFrame({'AP-1': [30, 32, 34, 31, 33, 35, 36, 38, 37],
'AP-2': [30, 32, 34, 80, 33, 35, 36, 38, 37],
'AP-3': [30, 32, 81, 31, 33, 101, 36, 38, 37],
'AP-4': [30, 32, 34, 95, 33, 35, 103, 38, 121],
'AP-5': [30, 32, 34, 31, 33, 144, 36, 38, 37],
'AP-6': [30, 32, 34, 31, 33, 35, 36, 110, 37],
'AP-7': [30, 87, 34, 31, 111, 35, 36, 38, 122],
'AP-8': [30, 32, 99, 31, 33, 35, 36, 38, 37],
'AP-9': [30, 32, 34, 31, 33, 99, 88, 38, 37]}, index=['1', '2', '3', '4', '5', '6', '7', '8', '9'])
df1 = df.transpose()
Это прекрасно работает.
Примечание о данных.Столбцы 1,2,3 являются «связанными».Они идут вместе.То же самое для столбцов 4,5,6 и 7,8,9.Я объясню более коротко.
Столбцы 1, 4, 7 - количество клиентов.Столбцы 2, 5, 8 - это канал, используемый в спектре 5 ГГц.Столбцы 3, 6, 9 - это канал, используемый в спектре 2,4 ГГц.
Обычно я беру показания с 5-минутными интервалами.Выше будет представлять три чтения с 5-минутными интервалами.
Мне нужны два новых кадра данных, два столбца каждый, построенный следующим образом:
Изучите столбцы 5 ГГц (здесь это 2,5, 8).То, которое когда-либо имеет самое высокое значение, становится столбцом 1 в новом кадре данных.Столбец 2 будет значением столбца подсчета клиентов, относящимся к столбцу 5 ГГц с наибольшим значением.Другими словами, если столбец 2 был самым высоким из столбцов 2, 5, 8, то я хочу, чтобы значение в столбце 1 было значением в новом кадре данных для второго столбца.Если значение в столбце 8 было наибольшим, то я также хочу получить значение в столбце 7. Я хочу, чтобы индекс был таким же в новых фреймах данных, как и оригинал - имя точки доступа.
Я хочу сделатьэто для всех строк в основном кадре данных.Мне нужны два новых кадра данных - поэтому я повторю эту точную процедуру для столбцов 5 ГГц и 2,4 (столбцы 3, 6, 9), также получая соответствующее наибольшее значение числа клиентов для второго столбца в новом кадре данных.
Что я пробовал:
Сначала я разбил основной фрейм данных на три: df1 имеет все столбцы подсчета клиентов, df2 имеет 5 ГГц, и df3 имеет информацию 2.4, используя это:
# create client count only dataframe
df_cc = df[df.columns[::3]]
print(df_cc)
print()
# create 5Ghz channel utilization only dataframe
df_5Ghz = df[df.columns[1::3]]
print(df_5Ghz)
print()
# create 2.4Ghz channel utilization only dataframe
df_24Ghz = df[df.columns[2::3]]
print(df_24Ghz)
print()
Это работает.
Я думал, что смогу ссылаться на основной фрейм данных, но не знаю как.
Затем я нашел это:
извлечение значения столбца на основе другого столбца pandas dataframe
Опция запроса выглядела великолепно, но я не знаю этого значения. Мне нужно сначала узнать максимальное значение 2,4 и 5Ghz столбцы, соответственно, затем захватить соответствующее значение счетчика клиентов. Поэтому я сначала создал кадры данных, содержащие только значения 2,4 и 5 ГГц, думая, что я мог бы сначала получить максимальное значение каждой строки, а затем выполнить поискОсновной фрейм данных (или используйте только количество клиентов, которое я создал), но я просто не знаю, как реализовать эту идею.
Любая помощь будет принята с благодарностью.