将groupby的结果合并到大熊猫的原始数据框中

时间:2020-09-27 05:10:04

标签: python pandas

我有以下411165行的pandas数据框:

    LastTime        Dur         SrcAddr     DstAddr    Proto Sport  Dport
0   03:20:18.581977 0.816447    10.0.0.1    10.0.0.4    udp 57532   tftp
1   03:20:32.313861 4.885413    10.0.0.2    10.0.0.4    udp 59977   tftp
2   03:20:37.366970 4.938308    10.0.0.2    10.0.0.4    udp 59977   tftp
3   03:20:42.420143 4.938177    10.0.0.2    10.0.0.4    udp 59977   tftp
4   03:20:47.473281 4.938372    10.0.0.2    10.0.0.4    udp 59977   http-alt
... ... ... ... ... ... ... ...
411161  22:28:29.841361 0.000000    231.127.193.147 10.0.0.4    udp 37335   tftp
411162  22:28:29.933401 0.000000    39.216.12.51    10.0.0.4    udp 36823   tftp
411163  22:28:29.997108 0.000000    153.183.248.241 10.0.0.4    udp 37336   tftp
411164  22:28:30.148128 0.000000    49.29.36.35 10.0.0.4    udp 36824   tftp
411165  22:28:30.229133 0.000000    62.248.30.126   10.0.0.4    udp 37337   tftp

我以100的批次对数据帧执行了分组操作:

grouper=dataset.groupby([(np.arange(len(dataset.index))//100),'DstAddr','Dport'])
ct_sv_dst=grouper['LastTime'].count()

groupby操作的结果是:

DstAddr   Dport   
0     10.0.0.3  http-alt      2
      10.0.0.4  tftp         98
1     10.0.0.3  http-alt     33
      10.0.0.4  tftp         67
2     10.0.0.3  http-alt     34
                           ... 
4107  10.0.0.4  tftp        100
4108  10.0.0.4  tftp        100
4109  10.0.0.4  tftp        100
4110  10.0.0.4  tftp        100
4111  10.0.0.4  tftp         66
Name: LastTime, Length: 6252, dtype: int64

现在,我想将按操作分组的结果合并到原始数据框中,请有人可以指导我如何实现此目标。 我想要的结果是这样的:

      LastTime      Dur         SrcAddr     DstAddr    Proto Sport  Dport gc
0   03:20:18.581977 0.816447    10.0.0.1    10.0.0.4    udp 57532   tftp  98
1   03:20:32.313861 4.885413    10.0.0.2    10.0.0.4    udp 59977   tftp  98
2   03:20:37.366970 4.938308    10.0.0.2    10.0.0.4    udp 59977   tftp  98
3   03:20:42.420143 4.938177    10.0.0.2    10.0.0.4    udp 59977   tftp  98
4   03:20:47.473281 4.938372    10.0.0.2    10.0.0.4    tcp 59977  http-alt 2
.
.
100  02:20          3.232       10.0.0.1    10.0.0.3    tcp 3234  http-alt 33 
101  02:20          3.232       10.0.0.1    10.0.0.4    udp 3234  tftp    67   

2 个答案:

答案 0 :(得分:0)

这可以完成工作。

<center><p align = "center"> :star::star::star: </p> </center>

答案 1 :(得分:0)

在连接之前,您需要确保2个数据框具有相同的列。到目前为止,groupby操作的结果缺少几列。通过将更多列分组规则传递给ct_sv_dst = grouper.agg({'LastTime':'count', 'proto':lambda x: x.value_counts().index[0], MORE AGG RULES HERE})

来解决此问题

然后使用pd.DataFrame.concat()连接原始数据帧和groupby()agg()的结果。更多详细信息here