我有以下数据框:

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

关于python - 如何基于一组行在Pandas DataFrame中创建新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58848365/

10-10 21:47
查看更多