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
相关产品推荐
相关产品推荐

