猿问

python-pandas:基于索引的新列?

我有一个类似于下面的 df :


        name    age sex

   1    john    12  m

   2    mary    13  f

   3    joseph  12  m

   4    maria   14  f

如何根据索引创建新列?例如,对于索引 1 和 2,我希望它们有标签1,对于索引 3 和 4,我希望它们有标签2,如下所示:


        name    age sex label

   1    john    12  m   cluster1

   2    mary    13  f   cluster1

   3    joseph  12  m   cluster2

   4    maria   14  f   cluster2

我应该使用类似的东西(df.index.isin([1, 2])) == 'cluster1'吗?我认为不可能假设一df['target'] = (df.index.isin([1, 2])) == 'cluster1开始label就不存在。


HUWWW
浏览 126回答 4
4回答

潇潇雨雨

我想这就是你要找的东西?您可以使用不同集群的列表,以这种方式使您的标签任意。import pandas as pddata = {'name':['bob','sue','mary','steve'], 'age':[11, 23, 53, 44]}df = pd.DataFrame(data)print(df)df['label'] = 0cluster1 = [0, 3]cluster2 = [1, 2]df.loc[cluster1, 'label'] = 1df.loc[cluster2, 'label'] = 2    #another way#df.iloc[cluster1, df.columns.get_loc('label')] = 1#df.iloc[cluster2, df.columns.get_loc('label')] = 2print(df)输出:    name  age0    bob   111    sue   232   mary   533  steve   44    name  age  label0    bob   11      11    sue   23      22   mary   53      23  steve   44      1您可以让初始列创建为任何内容。因此,您可以将其设置为集群值之一(这样您只需手动设置另一个集群,而不是同时设置两者),也可以将其设置为集群值,这样您就可以在分配标签后轻松检查是否错过了任何集群None值行。如果对集群的分配确实是任意的,我认为您无法比这更自动化。

慕妹3242003

这是您正在寻找的解决方案吗?我将数据加倍,以便您可以尝试不同的序列。在这里,如果您编写 create_label(df, 3) 而不是 2,它将以 3 乘 3 的方式进行迭代。它为您提供了获得参数化解决方案的机会。import pandas as pddf = pd.DataFrame({'name': ['john', 'mary', 'joseph', 'maria', 'john', 'mary', 'joseph', 'maria'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'age': [12, 13, 12, 14, 12, 13, 12, 14],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'sex': ['m', 'f','m', 'f', 'm', 'f','m', 'f']})df.index = df.index + 1df['label'] = pd.Series()def create_label(data, each_row):&nbsp; &nbsp;i = 0&nbsp; &nbsp;j = 1&nbsp; &nbsp;while i <= len(data):&nbsp; &nbsp; &nbsp; data['label'][i: i + each_row] = 'label' + str(j)&nbsp; &nbsp; &nbsp; i += each_row&nbsp; &nbsp; &nbsp; j += 1&nbsp; &nbsp;return datadf_new = create_label(df, 2)

波斯汪

对于小型数据框或数据集,您可以使用以下代码Label=pd.Series(['cluster1','cluster1','cluster2','cluster2'])df['label']=Label

慕田峪9158850

您可以使用 for 循环并使用列表来获取包含所需数据的新列import pandas as pddf = pd.read_csv("dataset.csv")list1 = []for i in range(len(df.name)):&nbsp; &nbsp;if i < 2:&nbsp; &nbsp; &nbsp; list1.append('cluster1')&nbsp; &nbsp;else:&nbsp; &nbsp; &nbsp; list1.append('cluster2')label = pd.Series(list1)df['label'] = label
随时随地看视频慕课网APP

相关分类

Python
我要回答