首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python中数据帧中的序列长度

python中数据帧中的序列长度
EN

Stack Overflow用户
提问于 2019-02-27 19:20:31
回答 5查看 1.2K关注 0票数 1

我在python中有一个dataframe,其列如下所示:

代码语言:javascript
复制
Type   
 A        
 A 
 B
 B
 B

我想按照Type的顺序向我的数据帧中添加另一列:

代码语言:javascript
复制
Type   Seq  
 A      1       
 A      2
 B      1
 B      2
 B      3

我是用下面的命令在R中这样做的:

代码语言:javascript
复制
setDT(df)[ , Seq := seq_len(.N), by = rleid(Type) ] 

我不知道怎么做蟒蛇。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-02-27 19:43:57

编辑更新的问题

代码语言:javascript
复制
df['seq'] = df.groupby('Type').cumcount() + 1
df

输出:

代码语言:javascript
复制
  Type  seq
0    A    1
1    A    2
2    B    1
3    B    2
4    B    3

使用pd.factorize

代码语言:javascript
复制
import pandas as pd
df['seq'] = pd.factorize(df['Type'])[0] + 1
df

输出:

代码语言:javascript
复制
  Type  seq
0    A    1
1    A    1
2    B    2
3    B    2
4    B    2
票数 1
EN

Stack Overflow用户

发布于 2019-02-27 19:50:33

使用Series.rank

代码语言:javascript
复制
df['seq'] = df['Type'].rank(method = 'dense').astype(int)

   Type seq
0   A   1
1   A   1
2   B   2
3   B   2
4   B   2
票数 2
EN

Stack Overflow用户

发布于 2019-02-27 19:54:38

pandas

代码语言:javascript
复制
(df.Type!=df.Type.shift()).ne(0).cumsum()
Out[58]: 
0    1
1    1
2    2
3    2
4    2
Name: Type, dtype: int32

更多信息

代码语言:javascript
复制
v=c('A','A','B','B','B','A')
data.table::rleid(v)
[1] 1 1 2 2 2 3


df 
  Type
0    A
1    A
2    B
3    B
4    B
5    A# assign a new  number in R data.table rleid
(df.Type!=df.Type.shift()).ne(0).cumsum()
Out[60]: 
0    1
1    1
2    2
3    2
4    2
5    3# check 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54912973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档