如何通过pandas 0.19.2

时间:2017-09-06 06:07:33

标签: python pandas

我有一个像这样的数据框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中创建这个新专栏?

2 个答案:

答案 0 :(得分:5)

您需要GroupBy.ngroup0.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?