根据Pandas的现有序列增加一个索引变量

2024-10-16 23:38:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有可能在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: 方法dataframepandasdfnewforexample方式
1条回答
网友
1楼 · 发布于 2024-10-16 23:38:40

如果我没看错的话,新的系列从“Tags”是“tag1”开始,前面的“Tags”是“tag3”。如果是这样,应该这样做:

df['new index'] = 0
df['new index'][(df['Tags'] == 'tag1') & (df['Tags'].shift(1) == 'tag3')] = 1
df['new index'] = df['new index'].cumsum()

相关问题 更多 >