【发布时间】:2020-08-13 23:36:01
【问题描述】:
我需要根据一些特定条件创建一个加一的ID:
- 上一行的 RespondentID 与该行的 RespondentID 不同
- 当最后一行的目的 == 1
- 当最后一行的目的 == 7 AND TripNumber == 1
如果这些条件中的一个以上适用,它仍然应该只增加 1。
data = {'RespondentID': [101, 101, 101, 101, 102, 102, 102, 103, 103, 103, 106, 106, 106, 107, 108, 108, 109, 109, 109, 109, 109, 110],
'TripNumber': [1, 2, 3, 4, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 2, 1, 2, 3, 4, 5, 1],
'Purpose': [4, 1, 6, 1, 7, 4, 1, 4, 6, 8, 6, 5, 1, 7, 4, 4, 7, 5, 6, 5, 1, 4]}
df = pd.DataFrame(data=data)
我需要创造
df['JourneyID'] = [1, 1, 2, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 7, 8, 8, 9, 10, 10, 10, 10, 11]
分解它。
1:新的(第一个)响应者 ID。
2:最后一行在目的中有 1。
3、5、7 和 11:新的 RespondentID(最后一行的目的为 1)。
4 和 10:最后一行的目的为 7,行程编号为 1。
6 和 9:新的 RespondentID
8:新的 RespondentID(最后一行的目的是 7 而 TripNumber 是 1)
此解决方案适用于条件 2:
temp = ((df['purpose']==1).cumsum()+1).shift(1)
#Makes it go up by one each time the previous row had purpose == 1
temp[0]=1
df['JourneyID'] = temp
但我还需要它与其他 2 个条件一起增加 1。
【问题讨论】:
-
请清楚是什么阻止了你。你知道如何测试一个重要的条件——你只需要为你的其他规则编写测试,并在你的 ID 计算行中加入
or。 -
我明白你的意思。没想到只加一个“或”就这么简单。
标签: python pandas dataframe primary-key data-cleaning