在 Pandas 中获取集群样本
Getting Samples of Clusters in Pandas
我在 pandas 数据框中有一个数据集,其中包含名称列表和它们所属的集群。总共有超过 1,000 个不同的集群。我希望创建 4 个样本,其中包含 100 个簇,它们之间没有簇重叠。另请记住,每个集群中的名称数量可能不同,并且集群值不是连续的。下面是数据集外观的示例。感谢任何帮助。谢谢!
姓名
集群
迈克乔丹
1
迈克尔·乔丹
1
乔·史密斯
3
约翰·S.
6
约翰·史密斯
6
使用 np.random.choice
和 replace=False
到 select 400 个不重叠的唯一集群,然后您可以 array_split
从中创建 100 个组。有很多方法可以拆分数据,但这里我将根据集群以及它属于 array_split 中的哪个数组将唯一 ID 映射回原始 DataFrame。
示例数据
import pandas as pd
import numpy as np
df = pd.DataFrame({'name': list('ABCDEFGHIJ'),
'cluster': [1,2,3,1,2,5,5,6,6,7]})
代码
np.random.seed(1234)
N = 4
nsplits = 2
clusts = np.random.choice(df.cluster.unique(), size=N, replace=False)
d = {c: i for i, arr in enumerate(np.array_split(clusts, nsplits)) for c in arr}
#{3: 0, 2: 0, 7: 1, 1: 1}
df['group'] = df['cluster'].map(d).astype('Int64')
# name cluster group
#0 A 1 1
#1 B 2 0
#2 C 3 0
#3 D 1 1
#4 E 2 0
#5 F 5 <NA>
#6 G 5 <NA>
#7 H 6 <NA>
#8 I 6 <NA>
#9 J 7 1
因此,簇 2 和 3 映射到组 1,簇 1 和 7 映射到组 2。在您的代码中,您可以使用 N = 400
和 nsplits = 4
来获得 4 组 100。现在您可以 df.groupby('group')
获取我们映射回的每个组的数据帧。
我在 pandas 数据框中有一个数据集,其中包含名称列表和它们所属的集群。总共有超过 1,000 个不同的集群。我希望创建 4 个样本,其中包含 100 个簇,它们之间没有簇重叠。另请记住,每个集群中的名称数量可能不同,并且集群值不是连续的。下面是数据集外观的示例。感谢任何帮助。谢谢!
姓名 | 集群 |
---|---|
迈克乔丹 | 1 |
迈克尔·乔丹 | 1 |
乔·史密斯 | 3 |
约翰·S. | 6 |
约翰·史密斯 | 6 |
使用 np.random.choice
和 replace=False
到 select 400 个不重叠的唯一集群,然后您可以 array_split
从中创建 100 个组。有很多方法可以拆分数据,但这里我将根据集群以及它属于 array_split 中的哪个数组将唯一 ID 映射回原始 DataFrame。
示例数据
import pandas as pd
import numpy as np
df = pd.DataFrame({'name': list('ABCDEFGHIJ'),
'cluster': [1,2,3,1,2,5,5,6,6,7]})
代码
np.random.seed(1234)
N = 4
nsplits = 2
clusts = np.random.choice(df.cluster.unique(), size=N, replace=False)
d = {c: i for i, arr in enumerate(np.array_split(clusts, nsplits)) for c in arr}
#{3: 0, 2: 0, 7: 1, 1: 1}
df['group'] = df['cluster'].map(d).astype('Int64')
# name cluster group
#0 A 1 1
#1 B 2 0
#2 C 3 0
#3 D 1 1
#4 E 2 0
#5 F 5 <NA>
#6 G 5 <NA>
#7 H 6 <NA>
#8 I 6 <NA>
#9 J 7 1
因此,簇 2 和 3 映射到组 1,簇 1 和 7 映射到组 2。在您的代码中,您可以使用 N = 400
和 nsplits = 4
来获得 4 组 100。现在您可以 df.groupby('group')
获取我们映射回的每个组的数据帧。