【问题标题】:Pandas: how to add a column with a value based on conditions on differents columns熊猫:如何根据不同列的条件添加具有值的列
【发布时间】:2023-01-13 19:31:50
【问题描述】:

我正在分析一个由 5 列组成的互联网通信数据集,下面是一个示例

IPSrc IPDst PortSrc PortDst Length
IP1 IP2 Pr1 Pr2 35
IP3 IP4 Pr3 Pr4 36
IP2 IP1 Pr2 Pr1 88
IP4 IP3 Pr4 Pr3 150
IP5 IP6 Pr5 Pr6 11
IP1 IP4 Pr8 Pr9 36

我想获得相同的数据集,但有一个新的列长度 2,其中长度 2 是符合这些条件的行的值:

IPSrc = IPDst
IPDst = IPSrc
PortSrc = PortDst
PortDst = PortSrc

所以在这个例子中,理想的结果是:

IPSrc IPDst PortSrc PortDst Length Length 2
IP1 IP2 Pr1 Pr2 35 88
IP3 IP4 Pr3 Pr4 36 150
IP2 IP1 Pr2 Pr1 88 35
IP4 IP3 Pr4 Pr3 150 36
IP5 IP6 Pr5 Pr6 11
IP1 IP4 Pr8 Pr9 36

知道数据集包含 100 万行,如果给定的答案会考虑性能,我们将不胜感激。

提前致谢 :)

【问题讨论】:

    标签: pandas numpy group-by dataset


    【解决方案1】:

    DataFrame.join 与转换为 index 的匹配列与参数 on 中的列一起使用:

    df = df.join(df.set_index(['IPSrc','PortSrc'])['Length'].rename('Length 2'), 
                 on=['IPDst','PortDst'])
    print (df)
      IPSrc IPDst PortSrc PortDst  Length  Length 2
    0   IP1   IP2     Pr1     Pr2      35      88.0
    1   IP3   IP4     Pr3     Pr4      36     150.0
    2   IP2   IP1     Pr2     Pr1      88      35.0
    3   IP4   IP3     Pr4     Pr3     150      36.0
    4   IP5   IP6     Pr5     Pr6      11       NaN
    5   IP1   IP4     Pr8     Pr9      36       NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2021-12-18
      相关资源
      最近更新 更多