如何使用python生成id号?
我有一个数据帧。我想为每个人创建一个唯一的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
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