我在python中有一个dataframe,其列如下所示:
Type
A
A
B
B
B我想按照Type的顺序向我的数据帧中添加另一列:
Type Seq
A 1
A 2
B 1
B 2
B 3我是用下面的命令在R中这样做的:
setDT(df)[ , Seq := seq_len(.N), by = rleid(Type) ] 我不知道怎么做蟒蛇。
发布于 2019-02-27 19:43:57
编辑更新的问题
df['seq'] = df.groupby('Type').cumcount() + 1
df输出:
Type seq
0 A 1
1 A 2
2 B 1
3 B 2
4 B 3使用pd.factorize
import pandas as pd
df['seq'] = pd.factorize(df['Type'])[0] + 1
df输出:
Type seq
0 A 1
1 A 1
2 B 2
3 B 2
4 B 2发布于 2019-02-27 19:50:33
使用Series.rank,
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发布于 2019-02-27 19:54:38
在pandas中
(df.Type!=df.Type.shift()).ne(0).cumsum()
Out[58]:
0 1
1 1
2 2
3 2
4 2
Name: Type, dtype: int32更多信息
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 https://stackoverflow.com/questions/54912973
复制相似问题