Home > other >  Consolidate python pandas table
Consolidate python pandas table

Time:05-11

I am using pyATS to gather information about a device's ARP table. The output is a dictionary-like object which I have managed to turn into a table by using pandas.

I now have the following table in pandas:

           interface       neighbor             ip link_layer_address  type   origin  age  protocol
0   GigabitEthernet1  10.122.41.129  10.122.41.129                NaN   NaN      NaN  NaN       NaN
1   GigabitEthernet1  10.122.41.129            NaN     001a.6c78.e7ff   NaN      NaN  NaN       NaN
2   GigabitEthernet1  10.122.41.129            NaN                NaN  ARPA      NaN  NaN       NaN
3   GigabitEthernet1  10.122.41.129            NaN                NaN   NaN  dynamic  NaN       NaN
4   GigabitEthernet1  10.122.41.129            NaN                NaN   NaN      NaN   47       NaN
5   GigabitEthernet1  10.122.41.129            NaN                NaN   NaN      NaN  NaN  Internet
6   GigabitEthernet1  10.122.41.169  10.122.41.169                NaN   NaN      NaN  NaN       NaN
7   GigabitEthernet1  10.122.41.169            NaN     0050.569f.840b   NaN      NaN  NaN       NaN
8   GigabitEthernet1  10.122.41.169            NaN                NaN  ARPA      NaN  NaN       NaN
9   GigabitEthernet1  10.122.41.169            NaN                NaN   NaN   static  NaN       NaN
10  GigabitEthernet1  10.122.41.169            NaN                NaN   NaN      NaN    -       NaN
11  GigabitEthernet1  10.122.41.169            NaN                NaN   NaN      NaN  NaN  Internet
12  GigabitEthernet1  10.122.41.171  10.122.41.171                NaN   NaN      NaN  NaN       NaN
13  GigabitEthernet1  10.122.41.171            NaN     0050.569f.7e22   NaN      NaN  NaN       NaN
14  GigabitEthernet1  10.122.41.171            NaN                NaN  ARPA      NaN  NaN       NaN
15  GigabitEthernet1  10.122.41.171            NaN                NaN   NaN  dynamic  NaN       NaN
16  GigabitEthernet1  10.122.41.171            NaN                NaN   NaN      NaN  208       NaN
17  GigabitEthernet1  10.122.41.171            NaN                NaN   NaN      NaN  NaN  Internet
18  GigabitEthernet1  10.122.41.186  10.122.41.186                NaN   NaN      NaN  NaN       NaN
19  GigabitEthernet1  10.122.41.186            NaN     0050.569f.3343   NaN      NaN  NaN       NaN
20  GigabitEthernet1  10.122.41.186            NaN                NaN  ARPA      NaN  NaN       NaN
21  GigabitEthernet1  10.122.41.186            NaN                NaN   NaN  dynamic  NaN       NaN
22  GigabitEthernet1  10.122.41.186            NaN                NaN   NaN      NaN  228       NaN
23  GigabitEthernet1  10.122.41.186            NaN                NaN   NaN      NaN  NaN  Internet
24  GigabitEthernet2    172.20.3.14    172.20.3.14                NaN   NaN      NaN  NaN       NaN
25  GigabitEthernet2    172.20.3.14            NaN     0050.569f.0e3d   NaN      NaN  NaN       NaN
26  GigabitEthernet2    172.20.3.14            NaN                NaN  ARPA      NaN  NaN       NaN
27  GigabitEthernet2    172.20.3.14            NaN                NaN   NaN   static  NaN       NaN
28  GigabitEthernet2    172.20.3.14            NaN                NaN   NaN      NaN    -       NaN
29  GigabitEthernet2    172.20.3.14            NaN                NaN   NaN      NaN  NaN  Internet
30  GigabitEthernet2    172.20.3.15    172.20.3.15                NaN   NaN      NaN  NaN       NaN
31  GigabitEthernet2    172.20.3.15            NaN     0050.569f.2637   NaN      NaN  NaN       NaN
32  GigabitEthernet2    172.20.3.15            NaN                NaN  ARPA      NaN  NaN       NaN
33  GigabitEthernet2    172.20.3.15            NaN                NaN   NaN  dynamic  NaN       NaN
34  GigabitEthernet2    172.20.3.15            NaN                NaN   NaN      NaN   84       NaN
35  GigabitEthernet2    172.20.3.15            NaN                NaN   NaN      NaN  NaN  Internet
36  GigabitEthernet2    172.20.3.16    172.20.3.16                NaN   NaN      NaN  NaN       NaN
37  GigabitEthernet2    172.20.3.16            NaN     0050.569f.98f8   NaN      NaN  NaN       NaN
38  GigabitEthernet2    172.20.3.16            NaN                NaN  ARPA      NaN  NaN       NaN
39  GigabitEthernet2    172.20.3.16            NaN                NaN   NaN  dynamic  NaN       NaN
40  GigabitEthernet2    172.20.3.16            NaN                NaN   NaN      NaN   73       NaN
41  GigabitEthernet2    172.20.3.16            NaN                NaN   NaN      NaN  NaN  Internet
42  GigabitEthernet2    172.20.3.17    172.20.3.17                NaN   NaN      NaN  NaN       NaN
43  GigabitEthernet2    172.20.3.17            NaN     0050.569f.1b6f   NaN      NaN  NaN       NaN
44  GigabitEthernet2    172.20.3.17            NaN                NaN  ARPA      NaN  NaN       NaN
45  GigabitEthernet2    172.20.3.17            NaN                NaN   NaN  dynamic  NaN       NaN
46  GigabitEthernet2    172.20.3.17            NaN                NaN   NaN      NaN  128       NaN
47  GigabitEthernet2    172.20.3.17            NaN                NaN   NaN      NaN  NaN  Internet
48  GigabitEthernet2    172.20.3.18    172.20.3.18                NaN   NaN      NaN  NaN       NaN
49  GigabitEthernet2    172.20.3.18            NaN     0050.569f.2ac9   NaN      NaN  NaN       NaN
50  GigabitEthernet2    172.20.3.18            NaN                NaN  ARPA      NaN  NaN       NaN
51  GigabitEthernet2    172.20.3.18            NaN                NaN   NaN  dynamic  NaN       NaN
52  GigabitEthernet2    172.20.3.18            NaN                NaN   NaN      NaN  109       NaN
53  GigabitEthernet2    172.20.3.18            NaN                NaN   NaN      NaN  NaN  Internet
54  GigabitEthernet2   172.20.3.250   172.20.3.250                NaN   NaN      NaN  NaN       NaN
55  GigabitEthernet2   172.20.3.250            NaN     0050.569f.ed6d   NaN      NaN  NaN       NaN
56  GigabitEthernet2   172.20.3.250            NaN                NaN  ARPA      NaN  NaN       NaN
57  GigabitEthernet2   172.20.3.250            NaN                NaN   NaN  dynamic  NaN       NaN
58  GigabitEthernet2   172.20.3.250            NaN                NaN   NaN      NaN  235       NaN
59  GigabitEthernet2   172.20.3.250            NaN                NaN   NaN      NaN  NaN  Internet

I want to turn it into:

           interface       neighbor             ip link_layer_address  type   origin  age  protocol
0   GigabitEthernet1  10.122.41.129  10.122.41.129     001a.6c78.e7ff  ARPA  dynamic   47  Internet
6   GigabitEthernet1  10.122.41.169  10.122.41.169     0050.569f.840b  ARPA   static    -  Internet
12  GigabitEthernet1  10.122.41.171  10.122.41.171     0050.569f.7e22  ARPA  dynamic  208  Internet
...
54  GigabitEthernet2   172.20.3.250   172.20.3.250     0050.569f.ed6d  ARPA  dynamic  235  Internet

I have tried multiple alternatives but have not been able to develop a programmatic way to do it.

CodePudding user response:

df.groupby('neighbor').first().reset_index()

        neighbor         interface             ip link_layer_address  type    origin  age  protocol
0  10.122.41.129  GigabitEthernet1  10.122.41.129     001a.6c78.e7ff  ARPA   dynamic   47  Internet 
1  10.122.41.169  GigabitEthernet1  10.122.41.169     0050.569f.840b  ARPA    static    -  Internet 
2  10.122.41.171  GigabitEthernet1  10.122.41.171     0050.569f.7e22  ARPA   dynamic  208  Internet 
3  10.122.41.186  GigabitEthernet1  10.122.41.186     0050.569f.3343  ARPA   dynamic  228  Internet 
4    172.20.3.14  GigabitEthernet2    172.20.3.14     0050.569f.0e3d  ARPA    static    -  Internet 
5    172.20.3.15  GigabitEthernet2    172.20.3.15     0050.569f.2637  ARPA   dynamic   84  Internet 
6    172.20.3.16  GigabitEthernet2    172.20.3.16     0050.569f.98f8  ARPA   dynamic   73  Internet 
7    172.20.3.17  GigabitEthernet2    172.20.3.17     0050.569f.1b6f  ARPA   dynamic  128  Internet 
8    172.20.3.18  GigabitEthernet2    172.20.3.18     0050.569f.2ac9  ARPA   dynamic  109  Internet 
9   172.20.3.250  GigabitEthernet2   172.20.3.250     0050.569f.ed6d  ARPA   dynamic  235  Internet 

This gives the same result:

df.groupby('neighbor').last().reset_index()
  • Related