【问题标题】:how to add calculated columns in pandas如何在熊猫中添加计算列
【发布时间】:2022-01-06 13:06:30
【问题描述】:

我有一个带有一组 IP 规则的 Pandas 数据框。规则本身是存储为字符串的 IPv4 CIDR 地址,因此可能涵盖一个 IP 或可能涵盖多个 IP,并且还有规则名称和优先级列。我想首先按规则优先级对这个数据帧进行排序,然后按规则涵盖的 IP 数量。我使用ipaddress 模块中的IPv4Network 类尝试了几种方法:

  • .sort_values()key=lambda x: IPv4Network(x.str()).num_addresses 以及其他几个变体
  • 使用相同的IPv4Network(df['Rule']).num_addresses 逻辑添加一个计算列,但无法使其工作 - 例如 finalrules = finalrules.assign(num_addresses=lambda x: IPv4Network(x['Rule']).num_addresses)

我收到了来自 IPv4Network 类的异常,这表明我可能没有从数据框中取回字符串?不知何故,这种方法似乎也从数据框中删除了列,最后我只剩下Rule 列。我应该逐项迭代,还是需要编写一个理解对列进行操作的函数,或者如何解决这个问题?我觉得我对 .assign 的实际作用缺乏了解。

【问题讨论】:

    标签: python pandas dataframe ip-address


    【解决方案1】:

    和往常一样,列出表达式以进行救援。

    finalrules['num_addresses'] = [IPv4Network(rule).num_addresses for rule in finalrules['Rule']]

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2022-01-16
    • 2021-12-19
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多