首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多列上设置组,然后追加

在多列上设置组,然后追加
EN

Stack Overflow用户
提问于 2020-02-18 11:15:38
回答 3查看 60关注 0票数 1

我试图在我的dataframe中计算同一个数据包的出现次数,如果一个数据包具有以下匹配字段,则它是相同的:

代码语言:javascript
复制
['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']

我想在我的dataframe中创建一个带有出现值的新列,并将该列命名为'PerSec‘。

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

然而,当我跑步时:

代码语言:javascript
复制
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方法只能在一列上工作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-18 11:36:58

groupby之后只添加一列,然后传递给groupby一些聚合函数,例如GroupBy.count

代码语言:javascript
复制
cols = ['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']
df['PerSec'] = df.groupby(cols)['SourceIP'].transform('count')
票数 0
EN

Stack Overflow用户

发布于 2020-02-18 11:26:11

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

在你的情况下

代码语言:javascript
复制
df.groupby(['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'])

将返回分组数据,其中如果SourceIP等于它,则按SourcePort分组,等等。

票数 0
EN

Stack Overflow用户

发布于 2020-02-18 11:26:40

应该是这样的

代码语言:javascript
复制
df['PerSec'] = df.groupby([['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol']])['SourceIP', 'SourcePort', 'DestinationIP', 'DestinationPort', 'Protocol'].transform('PerSec')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60279643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档