Skip to main content
 首页 » 编程设计

python之如何根据一组行在 Pandas DataFrame 中创建一个新列

2025年05月04日13over140

我有以下数据框:

import pandas as pd 
cols = 'id,seq,msg'.split(',') 
 
data = [ 
        ['001',1,'abc aaa'], 
        ['001',2,'bcd bbb'], 
        ['001',3,'cde ccc'], 
        ['001',1,'def ddd'], 
        ['001',2,'efg eee'], 
        ['001',3,'fgh fff'], 
        ['001',4,'ghi ggg'], 
        ['002',1,'hij hhh'], 
        ['002',2,'ijk iii'], 
        ['002',3,'jkl jjj'] 
] 
df = pd.DataFrame(data,columns=cols) 
print(df) 

输出:

    id  seq      msg 
0  001    1  abc aaa 
1  001    2  bcd bbb 
2  001    3  cde ccc 
3  001    1  def ddd 
4  001    2  efg eee 
5  001    3  fgh fff 
6  001    4  ghi ggg 
7  002    1  hij hhh 
8  002    2  ijk iii 
9  002    3  jkl jjj 

如何获得如下输出:

    id  seq      msg msg_num 
0  001    1  abc aaa     1 
1  001    2  bcd bbb     1 
2  001    3  cde ccc     1 
3  001    1  def ddd     2 
4  001    2  efg eee     2 
5  001    3  fgh fff     2 
6  001    4  ghi ggg     2 
7  002    1  hij hhh     3 
8  002    2  ijk iii     3 
9  002    3  jkl jjj     3 

在上面的数据框中,id#001下有两条消息,id#002下有一条消息。seq字段排在id字段之后。多行 msg 字段创建一条消息。每当新消息开始时,seq # 都会发生变化。

请您参考如下方法:

国际联合会

df.seq.diff().lt(0).cumsum().add(1) 
Out[203]:  
0    1 
1    1 
2    1 
3    2 
4    2 
5    2 
6    2 
7    3 
8    3 
9    3 
Name: seq, dtype: int64