4 回答

TA貢獻1833條經(jīng)驗 獲得超4個贊
我想這就是你要找的東西?您可以使用不同集群的列表,以這種方式使您的標(biāo)簽任意。
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
您可以讓初始列創(chuàng)建為任何內(nèi)容。因此,您可以將其設(shè)置為集群值之一(這樣您只需手動設(shè)置另一個集群,而不是同時設(shè)置兩者),也可以將其設(shè)置為集群值,這樣您就可以在分配標(biāo)簽后輕松檢查是否錯過了任何集群None值行。
如果對集群的分配確實是任意的,我認為您無法比這更自動化。

TA貢獻1824條經(jīng)驗 獲得超6個贊
這是您正在尋找的解決方案嗎?我將數(shù)據(jù)加倍,以便您可以嘗試不同的序列。在這里,如果您編寫 create_label(df, 3) 而不是 2,它將以 3 乘 3 的方式進行迭代。它為您提供了獲得參數(shù)化解決方案的機會。
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)

TA貢獻1811條經(jīng)驗 獲得超4個贊
對于小型數(shù)據(jù)框或數(shù)據(jù)集,您可以使用以下代碼
Label=pd.Series(['cluster1','cluster1','cluster2','cluster2'])
df['label']=Label

TA貢獻1794條經(jīng)驗 獲得超8個贊
您可以使用 for 循環(huán)并使用列表來獲取包含所需數(shù)據(jù)的新列
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
添加回答
舉報