为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2023-09-26 14:01:37
我有一个类似于下面的 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就不存在。
查看完整描述

4 回答

?
潇潇雨雨

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值行。


如果对集群的分配确实是任意的,我认为您无法比这更自动化。


查看完整回答
反对 回复 2023-09-26
?
慕妹3242003

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)


查看完整回答
反对 回复 2023-09-26
?
波斯汪

TA贡献1811条经验 获得超4个赞

对于小型数据框或数据集,您可以使用以下代码


Label=pd.Series(['cluster1','cluster1','cluster2','cluster2'])

df['label']=Label


查看完整回答
反对 回复 2023-09-26
?
慕田峪9158850

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


查看完整回答
反对 回复 2023-09-26
  • 4 回答
  • 0 关注
  • 125 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信