如何基于字符串列的gouping为pandas数据框创建新列

时间:2017-09-26 15:44:12

标签: pandas dataframe group-by

我有一个像这样的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'

的分组中

结果数据框应如下所示(由于某种原因,降价表不起作用,因此链接):

enter image description here

我该怎么做?

2 个答案:

答案 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