4 回答
![?](http://img1.sycdn.imooc.com/54584d080001566902200220-100-100.jpg)
TA贡献1833条经验 获得超4个赞
我想这就是你要找的东西?您可以使用不同集群的列表,以这种方式使您的标签任意。
import pandas as pd
data = {'name':['bob','sue','mary','steve'], 'age':[11, 23, 53, 44]}
df = pd.DataFrame(data)
print(df)
df['label'] = 0
cluster1 = [0, 3]
cluster2 = [1, 2]
df.loc[cluster1, 'label'] = 1
df.loc[cluster2, 'label'] = 2
#another way
#df.iloc[cluster1, df.columns.get_loc('label')] = 1
#df.iloc[cluster2, df.columns.get_loc('label')] = 2
print(df)
输出:
name age
0 bob 11
1 sue 23
2 mary 53
3 steve 44
name age label
0 bob 11 1
1 sue 23 2
2 mary 53 2
3 steve 44 1
您可以让初始列创建为任何内容。因此,您可以将其设置为集群值之一(这样您只需手动设置另一个集群,而不是同时设置两者),也可以将其设置为集群值,这样您就可以在分配标签后轻松检查是否错过了任何集群None值行。
如果对集群的分配确实是任意的,我认为您无法比这更自动化。
![?](http://img1.sycdn.imooc.com/54586870000183e302200220-100-100.jpg)
TA贡献1824条经验 获得超6个赞
这是您正在寻找的解决方案吗?我将数据加倍,以便您可以尝试不同的序列。在这里,如果您编写 create_label(df, 3) 而不是 2,它将以 3 乘 3 的方式进行迭代。它为您提供了获得参数化解决方案的机会。
import pandas as pd
df = pd.DataFrame({'name': ['john', 'mary', 'joseph', 'maria', 'john', 'mary', 'joseph', 'maria'],
'age': [12, 13, 12, 14, 12, 13, 12, 14],
'sex': ['m', 'f','m', 'f', 'm', 'f','m', 'f']})
df.index = df.index + 1
df['label'] = pd.Series()
def create_label(data, each_row):
i = 0
j = 1
while i <= len(data):
data['label'][i: i + each_row] = 'label' + str(j)
i += each_row
j += 1
return data
df_new = create_label(df, 2)
![?](http://img1.sycdn.imooc.com/533e51f30001edf702000200-100-100.jpg)
TA贡献1811条经验 获得超4个赞
对于小型数据框或数据集,您可以使用以下代码
Label=pd.Series(['cluster1','cluster1','cluster2','cluster2'])
df['label']=Label
![?](http://img1.sycdn.imooc.com/5458471300017f3702200220-100-100.jpg)
TA贡献1794条经验 获得超7个赞
您可以使用 for 循环并使用列表来获取包含所需数据的新列
import pandas as pd
df = pd.read_csv("dataset.csv")
list1 = []
for i in range(len(df.name)):
if i < 2:
list1.append('cluster1')
else:
list1.append('cluster2')
label = pd.Series(list1)
df['label'] = label
添加回答
举报