基于多个因素的发生次数

问题描述 投票:0回答:1

我有一个超过250列的数据框。它们中的大多数是coil_#register_#的增量,并且具有srcdst的组合。我想为srcdst的每种组合计算该行中至少一个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
python pandas dataframe aggregate
1个回答
1
投票

用途:

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
© www.soinside.com 2019 - 2024. All rights reserved.