94400


集計したIPアドレスを第3オクテットでグループ化して集計したいです。

仮に集計したアドレスが送信元IPに記載されていれば、以下のように指定すれば集計できると思いますが、この方法だと逐一第三オクテットまで自分で記述しなければならず、煩雑だと考えます。

[code]

    df.groupby("送信元IP"=="172.168.10.***").count()
    
[/code]

他にどのような方法があるかご教示お願い致します。

なお、イメージとしては以下のような集計済みのデータに対して、第3オクテットでグループ化した集計を行いたいと考えております。

送信元IP | 宛先IP | 宛先ポート番号 | TCP/UDP | 合計  
---|---|---|---|---  
1.1.1.1 | 3.3.3.3 | 53 | 6 | 1  
1.1.1.2 | 3.3.3.3 | 57 | 17 | 1  
2.2.2.2 | 9.9.9.9 | 54 | 17 | 1  
2.2.2.3 | 9.9.9.9 | 59 | 6 | 1  
4.4.4.4 | 10.10.10.10 | 56 | 6 | 2


CC BY-SA 4.0
2023-04-03T01:55:33.483
94397
2023-04-03T09:53:27.420
2023-04-03T09:53:27.420
3060
57568
question
python python3
IPアドレスの集計を/24で行いたい


> 宛先Ipや宛先ポートのコラムを残して集計する
[code]

    import pandas as pd
    import io
    
    csv_data = '''
    送信元IP,宛先IP,宛先ポート番号,TCP/UDP,合計
    1.1.1.1,3.3.3.3,53,6,1
    1.1.1.2,3.3.3.3,57,17,1
    2.2.2.2,9.9.9.9,54,17,1
    2.2.2.3,9.9.9.9,59,6,1
    4.4.4.4,10.10.10.10,56,6,2
    '''
    df = pd.read_csv(io.StringIO(csv_data))
    
    #
    df['「合計」列の総計値'] = df.groupby(df['送信元IP'].str.replace(r'\.\d+$', '', regex=True))['合計'].transform(sum)
    print(df)
    
[/code]

送信元IP | 宛先IP | 宛先ポート番号 | TCP/UDP | 合計 | 「合計」列の総計値  
---|---|---|---|---|---  
1.1.1.1 | 3.3.3.3 | 53 | 6 | 1 | 2  
1.1.1.2 | 3.3.3.3 | 57 | 17 | 1 | 2  
2.2.2.2 | 9.9.9.9 | 54 | 17 | 1 | 2  
2.2.2.3 | 9.9.9.9 | 59 | 6 | 1 | 2  
4.4.4.4 | 10.10.10.10 | 56 | 6 | 2 | 2


CC BY-SA 4.0
2023-04-03T02:30:31.727
94400
2023-04-03T08:25:46.183
2023-04-03T08:25:46.183
47127
47127
94397
answer