94227
### 実現したいこと

Webサーバのアクセスログから送信元IP、宛先IP、宛先ポート番号、TCP/UDPの項目で整理したCSVファイルを取得しました。

データ内にそれぞれの要素（送信元IP、宛先IP、宛先ポート番号、TCP/UDP）の組み合わせが何件あるかを集計したい。

[![画像の説明をここに入力](https://i.stack.imgur.com/yrVv0.png)](https://i.stack.imgur.com/yrVv0.png)

### これまでに試したこと

PythonのPandasで以下のようなコードを使い、データの集計はできましたが、TCP/UDPの情報が集計データから消えてしまったため、TCP/UDPのデータを残しつつ、集計したい。

```

    pd.pivot_table(index="送信元IP", columns=["宛先IP","宛先ポート番号"],margins=True, margins_name="合計", aggfunc="count")
    
```
CC BY-SA 4.0
2023-03-17T14:52:31.550
94225
2023-03-17T16:54:41.020
2023-03-17T16:11:40.910
3060
57568
question
python
データの集計について
※ データを1行増やしています

```

    import pandas as pd
    import io
    
    csv_data = '''
    送信元IP,宛先IP,宛先ポート番号,TCP/UDP
    1.1.1.1,3.3.3.3,53,6
    2.2.2.2,9.9.9.9,54,17
    4.4.4.4,10.10.10.10,56,6
    1.1.1.2,3.3.3.3,57,17
    2.2.2.3,9.9.9.9,59,6
    4.4.4.4,10.10.10.10,56,6
    '''
    df = pd.read_csv(io.StringIO(csv_data))
    
    #
    dfx = df.groupby(df.columns.tolist(), as_index=False).size().rename({'size': '合計'}, axis=1)
    print(dfx)
    
```

送信元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-03-17T16:54:41.020
94227
2023-03-17T16:54:41.020
47127
94225
answer