我有一个像这样的pandas数据框:
df = pd.DataFrame({'a':['A','A','A','B','B'],
'b':['Alabama','Alabama','Antioch','Brisbane','Boolean']})
我想添加两个新列,分别为'n1'和'n2',这样属于第一组列'a'的所有行都将具有值1,而下一组将在新列'n1'中具有值2。列'b'和'n2'的逻辑相同,但嵌套在'a'
的分组中结果数据框应如下所示(由于某种原因,降价表不起作用,因此链接):
我该怎么做?
答案 0 :(得分:0)
您可以使用pandas.factorize
将输入值编码为枚举类型或分类变量;要获取n2
列,只需按a
分组并将b
分解为:
import pandas as pd
df['n1'] = pd.factorize(df.a)[0] + 1
df['n2'] = df.groupby('a').b.transform(lambda x: pd.factorize(x)[0] + 1)
df
# a b n1 n2
#0 A Alabama 1 1
#1 A Alabama 1 1
#2 A Antioch 1 2
#3 B Brisbane 2 1
#4 B Boolean 2 2
答案 1 :(得分:0)
或使用astype
category
df['n1'] = df.a.astype('category').cat.codes.add(1)
df['n2'] = df.groupby('a').b.transform(lambda x: x.astype('category').cat.codes.add(1))
df
Out[1254]:
a b n1 n2
0 A Alabama 1 1
1 A Alabama 1 1
2 A Antioch 1 2
3 B Brisbane 2 2
4 B Boolean 2 1