如何使用python生成id号?

如何使用python生成id号?,python,pandas,Python,Pandas,我有一个数据帧。我想为每个人创建一个唯一的ID号,并基于人和日期(每周)创建一列 以下是数据: name date a 6 four 2019-05-15 6 0 one 2019-05-01 0 1 one 2019-05-08 1 5 three 2019-05-01 5 2 two 2019-05-01 2 3 two 2019-05-08 3 4 two 2019-05-15 4 预期的结果是 name

我有一个数据帧。我想为每个人创建一个唯一的ID号,并基于人和日期(每周)创建一列

以下是数据:

    name       date  a
6   four 2019-05-15  6
0    one 2019-05-01  0
1    one 2019-05-08  1
5  three 2019-05-01  5
2    two 2019-05-01  2
3    two 2019-05-08  3
4    two 2019-05-15  4
预期的结果是

    name       date  a    id    week
6   four 2019-05-15  6     1    3
0    one 2019-05-01  0     2    1
1    one 2019-05-08  1     2    2
5  three 2019-05-01  5     3    1 
2    two 2019-05-01  2     4    1
3    two 2019-05-08  3     4    2
4    two 2019-05-15  4     4    3
我怎样才能得到“身份证”和“周”? 谢谢大家!

Like@cs95通过
7与除法天数一起使用

或:


我使用
cumsum
获取
df['id']
groupby
df.date
上获取
df['week']

df['id'] = df.name.ne(df.name.shift()).cumsum()
df['week'] = df.date.groupby(df.date).ngroup() + 1


Out[408]:
    name       date  a  id  week
6   four 2019-05-15  6   1     3
0    one 2019-05-01  0   2     1
1    one 2019-05-08  1   2     2
5  three 2019-05-01  5   3     1
2    two 2019-05-01  2   4     1
3    two 2019-05-08  3   4     2
4    two 2019-05-15  4   4     3

请问两个独立的问题,因为每个栏必须独立生成。下面是如何获取“id”:您还没有解释“周”的含义,但我假设您指的是该日期的运行周。请尝试
np.ceil(df.date.dt.day/7)
。谢谢!下次我将分别提问。“周”的意思正是我的意思。
df["Id"] = df.groupby("name").ngroup() + 1
df['week'] = np.ceil(df.date.dt.day / 7).astype(int)
print (df)

    name       date  a  Id  week
6   four 2019-05-15  6   1     3
0    one 2019-05-01  0   2     1
1    one 2019-05-08  1   2     2
5  three 2019-05-01  5   3     1
2    two 2019-05-01  2   4     1
3    two 2019-05-08  3   4     2
4    two 2019-05-15  4   4     3
df["Id"] = df.groupby("name").ngroup() + 1
df['week'] =  df.groupby("date").ngroup() + 1
print (df)

    name       date  a  Id  week
6   four 2019-05-15  6   1     3
0    one 2019-05-01  0   2     1
1    one 2019-05-08  1   2     2
5  three 2019-05-01  5   3     1
2    two 2019-05-01  2   4     1
3    two 2019-05-08  3   4     2
4    two 2019-05-15  4   4     3
df['id'] = df.name.ne(df.name.shift()).cumsum()
df['week'] = df.date.groupby(df.date).ngroup() + 1


Out[408]:
    name       date  a  id  week
6   four 2019-05-15  6   1     3
0    one 2019-05-01  0   2     1
1    one 2019-05-08  1   2     2
5  three 2019-05-01  5   3     1
2    two 2019-05-01  2   4     1
3    two 2019-05-08  3   4     2
4    two 2019-05-15  4   4     3