Python 如何按两列分组并在新列中分配类别(编号)?
我想按年龄和姓名分组,并在同一类别中分配不同的人 初始数据:Python 如何按两列分组并在新列中分配类别(编号)?,python,pandas,dataframe,Python,Pandas,Dataframe,我想按年龄和姓名分组,并在同一类别中分配不同的人 初始数据: name age salary abc 24 1000 def 27 2000 ghi 25 3000 jkl 24 1000 mno 25 3000 最终数据: name age salary group abc 24 1000 1 def 27 2000 2 ghi 25 3000 3 jkl 24 1000 1 m
name age salary
abc 24 1000
def 27 2000
ghi 25 3000
jkl 24 1000
mno 25 3000
最终数据:
name age salary group
abc 24 1000 1
def 27 2000 2
ghi 25 3000 3
jkl 24 1000 1
mno 25 3000 3
可以使用将类别转换为整数标识符
将数据分配给df,然后使用以下代码
# concat age and salary
fact = df.age.astype(str).str.cat(df.salary.astype(str))
# then use factorize
df['group'] = pd.factorize(fact)[0] + 1
输出:
name age salary group
0 abc 24 1000 1
1 def 27 2000 2
2 ghi 25 3000 3
3 jkl 24 1000 1
4 mno 25 3000 3
与两列创建的元组列表一起使用:
df['group'] = pd.factorize(list(zip(df['age'],df['salary'])))[0] + 1
print (df)
name age salary group
0 abc 24 1000 1
1 def 27 2000 2
2 ghi 25 3000 3
3 jkl 24 1000 1
4 mno 25 3000 3
或:
但我需要按年龄和工资分组,然后分配组,即年龄(24)和工资(4000)应该在第4组中,而不是在第1组中。好吧,您的示例没有显示。但我认为只要将年龄和薪水合并成一个字符串或列表,然后使用factorize就可以了。
df['group'] = pd.factorize(list(map(tuple, df[['age','salary']].values.tolist())))[0] + 1
print (df)
name age salary group
0 abc 24 1000 1
1 def 27 2000 2
2 ghi 25 3000 3
3 jkl 24 1000 1
4 mno 25 3000 3