我在使用Pandas查询时遇到了一些困难,希望能得到帮助。我正在使用的DataFrame如下:
data = {
"id": ["A", "A", "A", "A", "A", "A", "B", "B"],
"start": ["P1", "P2", "P3", "P4", "P1", "P5", "P1", "P3"],
"finish": ["P2", "P3", "P4", "P1", "P5", "P1", "P3", "P5"],
"order": [1, 2, 3, 4, 5, 6, 1, 2]
}
df = pd.DataFrame(data)
print(df)
id start finish order
0 A P1 P2 1
1 A P2 P3 2
2 A P3 P4 3
3 A P4 P1 4
4 A P1 P5 5
5 A P5 P1 6
6 B P1 P3 1
7 B P3 P5 2
对于每个id,我想计算出在“finish”列中达到的 唯一 点总数,但排除从P1开始的路径。
如果我们仔细看id A,期望的结果应该是3:
Step1: P1 -> P2 [X] (starting in P1 is forbidden)
Step2: P2 -> P3 +1
Step3: P3 -> P4 +1
Step4: P4 -> P1 +1
Step5: P1 -> P5 [X] (starting in P1 is forbidden)
Step6: P5 -> P1 +0 (P1 already visited in step 4)
使用相同的逻辑对于id为B,期望的结果应该是1。因此,我所需要的DataFrame如下:
id result
0 A 3
1 B 1
我的思路如下:首先我创建了一个掩码来过滤所有起点为P1的记录。然后,我需要按ID对剩余记录进行分组,并计算完成列中唯一值的数量。我的问题是我不知道如何用Python/Pandas语言将刚才所述的内容转录出来。如果有帮助会感激不尽。