【问题标题】:Python Pandas If value in column B = equals [X, Y, Z] replace column A with "T"Python Pandas 如果 B 列中的值 = 等于 [X, Y, Z] 将 A 列替换为“T”
【发布时间】:2014-09-17 15:54:50
【问题描述】:

假设我有这个数组:

A, B
1, G
2, X
3, F
4, Z
5, I

如果 B 列等于 [X, Y 或 Z] 将 A 列替换为值“T”

我找到了如何更改同一列中的值,但不能跨列,任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas comparison multiple-columns


    【解决方案1】:

    你可以试试这个:

    import pandas as pd
    df = pd.DataFrame({
            'A': [1, 2, 3, 4, 5],
            'B': ['G', 'X', 'F', 'Z', 'I']
         })
    df.ix[df.B.isin(['X','Y','Z']), 'A'] = 'T'
    print df
    

    输出:

       A  B
    0  1  G
    1  T  X
    2  3  F
    3  T  Z
    4  5  I
    

    记得使用ixloc 以避免在复制的切片上设置值。

    【讨论】:

      【解决方案2】:

      使用isinloc设置值:

      In [138]:
      
      df.loc[df.B.isin(['X','Y','Z']),'A']='T'
      df
      Out[138]:
         A  B
      0  1  G
      1  T  X
      2  3  F
      3  T  Z
      4  5  I
      

      你也可以使用np.where:

      In [140]:
      
      df['A'] = np.where(df.B.isin(['X','Y','Z']),'T', df['A'])
      df
      Out[140]:
         A  B
      0  1  G
      1  T  X
      2  3  F
      3  T  Z
      4  5  I
      

      【讨论】:

      • 我认为您使用的是 iPython。你知道这些之间的时间差异吗?
      • @user765015 在这个玩具示例中使用 loc 花费了 915 us,使用 where 花费了 615us,所以在这种情况下 where 快了 30%
      • @user765015 用于 50,000 行 df loc 比 11.2 毫秒略快 9.27 毫秒
      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 2021-04-25
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      相关资源
      最近更新 更多