Разделение данных с использованием таймфрейма на группы в python pandas

У меня есть фрейм данных с именем df, который нравится, но на самом деле он [9147 строк x 3 столбца]

indexID  RngUni[m]  PowUni[dB]
157203   1.292283      132
157201   1.271878      132
157016   1.285481      134
157404   1.305886      136
157500   1.353496      136
157524   1.251474      136
157227   1.292283      132
157543   1.339893      136
157903   1.353496      138
156928   1.299084      134
157373   1.299084      136
156937   1.414709      134
157461   1.353496      136
157718   1.360297      138
157815   1.326290      138
157806   1.271878      134
156899   1.360298      134
157486   1.414709      138
157628   1.271878      136
157405   1.299084      134
157244   1.299084      134
157522   1.258275      136
157515   1.367099      138
157086   1.305886      136
157602   1.251474      134
157131   1.265077      132
157170   1.380702      138
156904   1.360297      134
157209   1.401106      138
157018   1.265077      134

Я пытаюсь выбрать определенные значения данных в таблице.

df.plot(x = 'RngUni[m]', y = 'PowUni[dB]', kind = 'scatter') дает: Разделение данных с использованием таймфрейма на группы в python pandas

Предполагая, что основная группа - это область, в которой кластеризуется большая часть точек данных, мне нужно выбрать 80% точек, которые находятся в основной группе, и 20% точек, которые находятся за пределами основной группы.

Мне нужен indexID всех точек, выводимых в виде списка. Как я могу это сделать?

Пример требуемой кластеризации. Что я хотел бы сделать, так это выбрать 80% точек в круге и 20% точек за пределами круга. Разделение данных с использованием таймфрейма на группы в python pandas

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как я подойду к этой задаче:

from io import StringIO
import pandas as pd
from sklearn.cluster import KMeans

s = '''indexID  RngUni[m]  PowUni[dB]
157203   1.292283      132
157201   1.271878      132
157016   1.285481      134
157404   1.305886      136
157500   1.353496      136
157524   1.251474      136
157227   1.292283      132
157543   1.339893      136
157903   1.353496      138
156928   1.299084      134
157373   1.299084      136
156937   1.414709      134
157461   1.353496      136
157718   1.360297      138
157815   1.326290      138
157806   1.271878      134
156899   1.360298      134
157486   1.414709      138
157628   1.271878      136
157405   1.299084      134
157244   1.299084      134
157522   1.258275      136
157515   1.367099      138
157086   1.305886      136
157602   1.251474      134
157131   1.265077      132
157170   1.380702      138
156904   1.360297      134
157209   1.401106      138
157018   1.265077      134'''

ss = StringIO(s)
df = pd.read_csv(ss, sep=r"\s+")
kmeans = KMeans(n_clusters=2, random_state=0).fit(df.values[:,[1,2]])
df['labels']=kmeans.labels_
df['labels']=kmeans.labels_
df.labels.apply(lambda x: 'red' if x==1 else 'blue')

plt.scatter(x=df['RngUni[m]'], y=df['PowUni[dB]'], c=df['labels'])

Выход:

Просто измените алгоритм кластеризации и поиграйте с параметрами, чтобы получить желаемые кластеры и цвета.

Надеюсь, это поможет.

Привет! Спасибо за ваш комментарий. Мне просто интересно, что представляют собой два разных цвета на вашем графике? А как мне вывести список индексов выбранных точек?

Ruven Guna 05.10.2018 03:36

Я только что прочитал эту ссылку о kmeans (scikit-learn.org/stable/modules/generated/…) и до сих пор не совсем понимаю, как я могу вывести список точек, которые были сгруппированы вместе.

Ruven Guna 05.10.2018 04:02

Похоже, что у Kmeans есть разделение по некоторой границе принятия решений. Однако то, что мне нужно, может быть не разделением по линии, а по форме. Я отредактировал свой вопрос, чтобы включить это.

Ruven Guna 05.10.2018 04:08

@RuvenGuna ​​Если вы разместите полные данные, я могу показать, как можно изменить алгоритм кластеризации и получить желаемый кластер. Я использовал KMeans только для демонстрации идеи.

quest 05.10.2018 11:24

К сожалению, я не могу этого сделать, так как мне не разрешено загружать все данные. Но мне удалось решить проблему. Спасибо за вашу помощь!

Ruven Guna 08.10.2018 02:44

Другие вопросы по теме