按多个列分组,然后追加

2024-09-24 02:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图统计数据帧中相同数据包的出现次数,如果数据包具有以下匹配字段,则数据包是相同的:

['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']

我想在我的dataframe中创建一个具有发生值的新列,并将此列命名为“PerSec”

我已经尝试实现这里找到的这个问题的解决方案Pandas create new column with count from groupby

然而,当我跑步时:

df['PerSec'] = df.groupby(['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'].transform('PerSec'))
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(df)

我收到这个错误:

TypeError: list indices must be integers or slices, not tuple

这是否意味着groupby方法只对一列有效


Tags: nonedfwithdisplay数据包次数protocolmax
3条回答

groupby之后只添加一列,并将一些聚合函数传递给groupby,例如^{}

cols = ['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']
df['PerSec'] = df.groupby(cols)['SourceIP'].transform('count')

应该是这样的

df['PerSec'] = df.groupby([['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']])['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'].transform('PerSec')

Groupby方法可以扩展到多列。它将按给定的列顺序分组

对你来说

df.groupby(['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'])

将返回一个分组数据帧,其中如果SourceIP等于它,则按SourcePort分组,依此类推

相关问题 更多 >