1

私は巨大な NetFlow データベースを持っています (タイムスタンプ、送信元 IP、送信先 IP、プロトコル、送信元および送信先ポート番号、交換されたパケット数、バイト数などが含まれています)。現在および前の行に基づいてカスタム属性を作成したいと考えています。

現在の行のソース IP とタイムスタンプに基づいて新しい列を計算したいと考えています。これは私が論理的にやりたいことです:

  • 現在の行のソース IP を取得します。
  • 現在の行のタイムスタンプを取得します。
  • ソース IP とタイムスタンプに基づいて、ソース IP と一致するデータフレーム全体のすべての前の行を取得したいのですが、通信は過去 30 分間に発生しました。これはとても重要です。
  • 基準 (ソース IP と過去 30 分間に発生したもの) に一致する行 (私の例ではフロー) について、すべてのパケットとすべてのバイトの合計と平均を数えたいと思います。

データセットからの 1 行

関連するコードのスニペット:

df = pd.read_csv(path, header = None, names=['ts','td','sa','da','sp','dp','pr','flg','fwd','stos','pkt','byt','lbl'])

df['ts'] = pd.to_datetime(df['ts'])

def prev_30_ip_sum(ts,sa,size):
global joined
for (x,y) in zip(df['sa'], df['ts']):
    ...
return sum

df['prev30ipsumpkt'] = df.apply(lambda x: prev_30_ip_sum(x['ts'],x['sa'],x['pkt']), axis = 1)

これを行うには、おそらくもっと効率的で優れた方法があることはわかっていますが、残念ながら私は最高のプログラマーではありません。

ありがとう。

4

2 に答える 2