我有一个超过250列的数据框。它们中的大多数是coil_#
或register_#
的增量,并且具有src
和dst
的组合。我想为src
和dst
的每种组合计算该行中至少一个1
显示多少次。同时还要计算它是register
还是coil
。
样本数据框:
srcmacaddr dstmacaddr coil_0 coil_1 coil_2 register_0 register_1 register_2
00-11-2a-3b-4c-5d 22-33-6e-7f-8g-9h 0 1 0 0 NaN 0
22-33-6e-7f-8g-9h 00-11-2a-3b-4c-5d 0 1 0 0 1 1
00-11-2a-3b-4c-5d 00-99-5d-4c-3b-2a NaN NaN NaN NaN NaN NaN
00-99-5d-4c-3b-2a 22-33-6e-7f-8g-9h 0 0 0 0 0 0
22-33-6e-7f-8g-9h 00-11-2a-3b-4c-5d 1 1 1 1 1 1
00-11-2a-3b-4c-5d 00-99-5d-4c-3b-2a NaN NaN NaN 1 1 1
所需样本输出:
srcmacaddr dstmacaddr Coil or Reg Coil Reg
00-11-2a-3b-4c-5d 22-33-6e-7f-8g-9h 1 1 0
22-33-6e-7f-8g-9h 00-11-2a-3b-4c-5d 2 2 2
00-11-2a-3b-4c-5d 00-99-5d-4c-3b-2a 1 0 1
00-99-5d-4c-3b-2a 22-33-6e-7f-8g-9h 0 0 0
用途:
df1 = df.groupby(['srcmacaddr','dstmacaddr'], sort=False).sum().astype(int)
df1 = df1.groupby(lambda x: x.split('_')[0], axis=1).max()
print (df1)
coil register
srcmacaddr dstmacaddr
00-11-2a-3b-4c-5d 22-33-6e-7f-8g-9h 1 0
22-33-6e-7f-8g-9h 00-11-2a-3b-4c-5d 2 2
00-11-2a-3b-4c-5d 00-99-5d-4c-3b-2a 0 1
00-99-5d-4c-3b-2a 22-33-6e-7f-8g-9h 0 0