【问题标题】:How to slice a cluster from a particular column如何从特定列切分簇
【发布时间】:2019-07-23 04:07:13
【问题描述】:

df['clusters'] 包含有 4 个簇 0,1,2,3 的数据框。
我已经使用pandas 读取了csv 格式的数据框,并实现了k-means 聚类并生成了4 个聚类。集群位于df['clusters']
假设有 4 个标签为 0,1,2,3 的集群。
现在如何切片一列并获取属于集群1的列

【问题讨论】:

  • 您能否提供一个示例数据框以及您的预期结果?那么提供帮助会容易得多。
  • 可以说你的问题并不清楚 - 你应该强调这一点,而不是关于 k-means、csv 等的不相关细节;请参阅下面的更新答案
  • 请编辑您的问题,而不是在 cmets 中描述它,提供示例数据框,显示您想要的结果以及您为解决问题所做的尝试。

标签: python pandas dataframe slice


【解决方案1】:

我看不出您的问题到底是什么 - 使用 df[df['clusters'] == 3] 可以正常工作:

import pandas as pd

# dummy data:
df = pd.DataFrame({'a': [1, 2, 3, 8, 9], 'b': [3, 4, 5, 11, 2], 'clusters':[0,2,3,3,1]})

print(df)
# result:
   a   b  clusters
0  1   3         0
1  2   4         2
2  3   5         3
3  8  11         3
4  9   2         1

print(df[df['clusters'] == 3])  
# result:
   a   b  clusters
2  3   5         3
3  8  11         3

还想删除(现在不需要的)clusters 列吗?

df_3 = df[df['clusters'] == 3].drop(['clusters'], axis=1) # cluster #3
print(df_3)
# result
   a   b
2  3   5
3  8  11

更新(评论后):从df_3 分割列a

df_3_a = df_3.loc[:, ['a']]
print(df_3_a)
# result:
   a
2  3
3  8

所以,从最初的df 开始,选择acluster==3

df_3_a = df[df['clusters'] == 3].drop(['clusters'], axis=1).loc[:,['a']]
print(df_3_a_)
# result:
   a
2  3
3  8

【讨论】:

  • 感谢@desertnaut
【解决方案2】:

无法访问您的数据框,建议您将数据转换为 numpy 数组

df_array = df.to_numpy(copy=True)

然后:

df_clustered = df_array[df_array[:,cluster_data_col]==cluster_type]

其中cluster_data_col 是存储聚类结果的列号,cluster_type 是四个聚类中的任何一个。

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2012-11-11
    • 2021-02-26
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多