使用时间范围将数据分成python pandas中的组

时间:2018-10-04 08:26:15

标签: python python-2.7 pandas dataframe

我有一个名为df的数据框,它像这样,但实际上是[9147行x 3列]

dayNumber - 1

我想做的是从表中选择数据的某些值。

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 给出:enter image description here

假定主要组是大多数数据点聚类的区域,我需要做的是选择主要组中80%的点和主要组之外20%的点。

我需要输出为列表的所有点的indexID。我该怎么办?

所需集群的示例。我想做的是从圆圈中选取80%的点,从圆圈中选取20%的点。 enter image description here

1 个答案:

答案 0 :(得分:2)

这是我将要完成的任务的方式:

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'])

输出: enter image description here

只需更改聚类算法并使用参数即可获得所需的聚类和颜色。

希望有帮助。