我有一个像这样的数据框df
,但要大得多。
ID_0 ID_1 location
0 a b 1
1 a c 1
2 a b 0
3 d c 0
4 a c 0
5 a c 1
我想添加一个标识前两个的列。例如:
ID_0 ID_1 location group_ID
0 a b 1 0
1 a c 1 1
2 a b 0 0
3 d c 0 2
4 a c 0 1
5 a c 1 1
这个新专栏来自映射“a b”到0,“a c”到1和“d c”到2。
我认为这样做的第一个阶段是
grouped = df.groupby(['ID_0', 'ID_1'])
但我不知道从那里去哪里。
如何在pandas中创建这个新专栏?
答案 0 :(得分:5)
您需要GroupBy.ngroup
,0.20.2
中的新内容:
df['group_ID'] = df.groupby(['ID_0', 'ID_1']).ngroup()
print (df)
ID_0 ID_1 location group_ID
0 a b 1 0
1 a c 1 1
2 a b 0 0
3 d c 0 2
4 a c 0 1
5 a c 1 1
df['group_ID'] = df.groupby(['ID_0', 'ID_1']).grouper.group_info[0]
print (df)
ID_0 ID_1 location group_ID
0 a b 1 0
1 a c 1 1
2 a b 0 0
3 d c 0 2
4 a c 0 1
5 a c 1 1
答案 1 :(得分:1)
这应该可以在不使用GroupBy.ngroup
的情况下实现,而pandas
仅在较新的df['group_ID'] = df.groupby(['ID_0', 'ID_1']).grouper.group_info[0]
ID_0 ID_1 location group_ID
0 a b 1 0
1 a c 1 1
2 a b 0 0
3 d c 0 2
4 a c 0 1
版本中受支持:
=Count(Fields!OK.Value)
在此SO帖子中查找更多信息:Python Pandas: How can I group by and assign an id to all the items in a group?