Pandas:根据另一列中的字符串值分配分类列
Pandas: assign categorical column based on string values in another column
假设我有这样一个数据框:
A B
1 05010001 17
2 05020001 5
3 05020002 11
4 05020003 2
5 05030001 86
6 07030001 84
7 07030002 10
8 08010001 16
我想添加第三列 C
,它将 1
分配给所有 A
值以 05
开头的行,2
到所有以 07
开头的值等等。
结果将是:
A B C
1 05010001 17 1
2 05020001 5 1
3 05020002 11 1
4 05020003 2 1
5 05030001 86 1
6 07030001 84 2
7 07030002 10 2
8 08010001 16 3
最有效的方法是什么?我的实际数据框有 3,000,000 行。
编辑
我的实际数据框中的列 A
称为 First (C)
,带有 space。我不允许更改它。我是否必须对列的 header 进行某种操作?
firstTwo = df.sort_values('A').A.str[:2] # sort the data frame by column A and
# take the first two digits of column A
df['C'] = (firstTwo != firstTwo.shift()).cumsum() # create ids based on the first two
# digits with cumsum
df
假设我有这样一个数据框:
A B
1 05010001 17
2 05020001 5
3 05020002 11
4 05020003 2
5 05030001 86
6 07030001 84
7 07030002 10
8 08010001 16
我想添加第三列 C
,它将 1
分配给所有 A
值以 05
开头的行,2
到所有以 07
开头的值等等。
结果将是:
A B C
1 05010001 17 1
2 05020001 5 1
3 05020002 11 1
4 05020003 2 1
5 05030001 86 1
6 07030001 84 2
7 07030002 10 2
8 08010001 16 3
最有效的方法是什么?我的实际数据框有 3,000,000 行。
编辑
我的实际数据框中的列 A
称为 First (C)
,带有 space。我不允许更改它。我是否必须对列的 header 进行某种操作?
firstTwo = df.sort_values('A').A.str[:2] # sort the data frame by column A and
# take the first two digits of column A
df['C'] = (firstTwo != firstTwo.shift()).cumsum() # create ids based on the first two
# digits with cumsum
df