我想知道是否有可能在pandas中创建一个基于列值进化的新索引(就像变量的历史)。通常我会用循环编码的方式(循环或类似的方式)来完成这项工作,但我正在努力学习更多关于熊猫的知识。在
在本例中,'Tags'列包含'tag1'、'tag2'和'tag3',但当从第1列更改为第2列以及从第2列更改为第3列时,它们可能会混合在一起(参见下面的示例列表)。在
新索引应从第一行的0开始,仅在“tag1”出现时递增(但只递增一次,而不是每次“tag1”出现时)。当“Tags”是“tag2”和“tag3”时,它将保持不变。最后,新索引将再次递增,“tag1”将再次出现。在
如果您同意我的观点,我可以使用'idx++'在for循环中运行一个行操作,但是我想写一个pandas代码。我想在pandas.DataFrame.applymap()中,但我不确定这是否是方法。在
如果你能找到正确的方法,我会很感激你的解决办法。提前谢谢!在
# example input
phase_col=['tag1','tag1','tag1','tag1','tag2','tag2','tag1','tag2','tag1','tag2','tag3','tag3','tag2','tag3','tag2','tag3','tag3','tag3','tag1','tag1','tag2','tag2','tag3','tag1','tag2','tag3','tag1']
df= pd.DataFrame(data=phase_col, columns=['Tags'])
# I need this column:
df['new index']='' # increment once for each sequence of tag1->tag3
# example of an ideal output:
print(df)
Tags new index
0 tag1 0
1 tag1 0
2 tag1 0
3 tag1 0
4 tag2 0
5 tag2 0
6 tag1 0
7 tag2 0
8 tag1 0
9 tag2 0
10 tag3 0
11 tag3 0
12 tag2 0
13 tag3 0
14 tag2 0
15 tag3 0
16 tag3 0
17 tag3 0
18 tag1 1
19 tag1 1
20 tag2 1
21 tag2 1
22 tag3 1
23 tag1 2
24 tag2 2
25 tag3 2
26 tag1 3
如果我没看错的话,新的系列从“Tags”是“tag1”开始,前面的“Tags”是“tag3”。如果是这样,应该这样做:
相关问题 更多 >
编程相关推荐