You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas:检查DataFrame行相似度并添加匹配计数列

解决Pandas中按行匹配添加递增计数列的问题

嗨,作为Pandas新手遇到这类需求很正常,我来帮你一步步搞定!

首先我先明确你的需求:你想要给DataFrame新增一列,当某一行和之前的行在Device_Id和Msg这两个字段上都匹配时,这一列的数值就递增,对吧?如果是其他匹配规则,你可以随时调整下面的代码~

步骤1:构造示例DataFrame

先把你给出的数据转换成可运行的Pandas DataFrame,方便你复现测试:

import pandas as pd

data = {
    'Device_Id': ['ABC123', 'ABC123', 'XYZ123', 'ABC123', 'XVZ123', 'PQR123', 'ABC123'],
    'Msg': ['connected', 'connected', 'device failed', 'connected', 'device failed', 'error', 'connected'],
    'Time': [1524724677, 1524724679, 1524724814, 1524725279, 1524725300, 1524725325, 1524725345]
}
df = pd.DataFrame(data)

步骤2:添加递增计数列

我们可以用groupby结合cumcount()方法来实现这个需求。groupby用来指定哪些字段相同才算“行匹配”,cumcount()会给每组内的行按顺序生成序号,加1后就能得到从1开始的递增计数:

# 按Device_Id和Msg分组,生成从1开始的计数列
df['Count'] = df.groupby(['Device_Id', 'Msg']).cumcount() + 1

最终结果

运行完上面的代码后,你的DataFrame会变成这样:

Device_Id          Msg        Time  Count
0    ABC123    connected  1524724677      1
1    ABC123    connected  1524724679      2
2    XYZ123  device failed  1524724814      1
3    ABC123    connected  1524725279      3
4    XVZ123  device failed  1524725300      1
5    PQR123         error  1524725325      1
6    ABC123    connected  1524725345      4

小说明

  • 如果你的“行匹配”规则不是Device_Id+Msg,比如只按Device_Id计数,只需要把groupby的参数改成['Device_Id']就行;
  • cumcount()默认从0开始计数,所以加1是为了让计数从1开始,如果你习惯从0开始,可以去掉+1。

内容的提问来源于stack exchange,提问作者MukundS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:50:06