python中数据帧中的序列长度
我有一个python中的dataframe,其列如下所示:python中数据帧中的序列长度,python,pandas,dataframe,sequence,Python,Pandas,Dataframe,Sequence,我有一个python中的dataframe,其列如下所示: Type A A B B B 我想根据类型的顺序向数据框中添加另一列: Type Seq A 1 A 2 B 1 B 2 B 3 我在R中使用以下命令执行此操作: setDT(df)[ , Seq := seq_len(.N), by = rleid(Type) ] 我不知道怎么做 可能不是最好的方法,但请尝试以下
Type
A
A
B
B
B
我想根据类型的顺序向数据框中添加另一列:
Type Seq
A 1
A 2
B 1
B 2
B 3
我在R中使用以下命令执行此操作:
setDT(df)[ , Seq := seq_len(.N), by = rleid(Type) ]
我不知道怎么做 可能不是最好的方法,但请尝试以下方法:
df.loc[df['Type'] == A, 'Seq'] = 1
同样,对于B:
df.loc[df['Type'] == B, 'Seq'] = 2
一种奇怪的(不推荐的)方法是使用内置的ord()
函数获取字符的Unicode码点
即:
df['Seq'] = df['Type'].apply(lamba x: ord(x.lower())-96)
更好的方法是将字符串的类型更改为类别:
df['Seq'] = df['Type'].astype('category').cat.codes
如果需要不同的数字,可能需要增加代码。编辑更新的问题
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
Type seq
0 A 1
1 A 1
2 B 2
3 B 2
4 B 2
使用
pd.factorize
:
import pandas as pd
df['seq'] = pd.factorize(df['Type'])[0] + 1
df
输出:
Type seq
0 A 1
1 A 2
2 B 1
3 B 2
4 B 3
Type seq
0 A 1
1 A 1
2 B 2
3 B 2
4 B 2
使用
在
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
非常感谢。我现在编辑的问题实际上犯了一个错误。我希望序列是(1,2)和(1,2,3)。@user36729好的,回答这个问题。快乐编码!