【问题标题】:Split data using timeframe into groups in python pandas在 python pandas 中使用时间范围将数据拆分为组
【发布时间】:2018-10-04 08:26:15
【问题描述】:

我有一个名为 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') 给:

假设主组是大部分数据点聚集的区域,我需要做的是选择主组内的80%和主组外的20%的点。

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

所需的集群示例。我想做的是选择圆内 80% 的点和圆外 20% 的点。

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案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'])
    

    输出:

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

    希望对你有帮助。

    【讨论】:

    • 嗨!感谢您的评论。我只是想知道您图表中的两种不同颜色代表什么?以及如何输出所选点的索引列表?
    • 我刚刚阅读了有关 kmeans(scikit-learn.org/stable/modules/generated/…) 的链接,但我仍然不太明白如何输出已聚集在一起的点列表。
    • Kmeans 似乎有一个由某个决策边界线划分的拆分。但是,我需要的可能不是一条线,而是一个形状。我已编辑我的问题以包含此内容。
    • @RuvenGuna 如果您发布完整的数据,我可以展示如何更改聚类算法并获得所需的聚类。我使用 KMeans 只是为了演示这个想法。
    • 很遗憾,我不能这样做,因为我不允许上传整个数据。我已经设法解决了这个问题。感谢您的帮助!
    猜你喜欢
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2019-04-17
    相关资源
    最近更新 更多