我试图在我的dataframe中计算同一个数据包的出现次数,如果一个数据包具有以下匹配字段,则它是相同的:
['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:列表索引必须是整数或切片,而不是元组。
这是否意味着groupby方法只能在一列上工作?
发布于 2020-02-18 11:36:58
在groupby之后只添加一列,然后传递给groupby一些聚合函数,例如GroupBy.count
cols = ['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']
df['PerSec'] = df.groupby(cols)['SourceIP'].transform('count')发布于 2020-02-18 11:26:11
Groupby方法可以扩展到多个列。它将按给定的列顺序分组。
在你的情况下
df.groupby(['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'])将返回分组数据,其中如果SourceIP等于它,则按SourcePort分组,等等。
发布于 2020-02-18 11:26:40
应该是这样的
df['PerSec'] = df.groupby([['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']])['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'].transform('PerSec')https://stackoverflow.com/questions/60279643
复制相似问题