【问题标题】:indexing with multidimensional key pandas error使用多维键 pandas 错误进行索引
【发布时间】:2023-03-11 01:14:01
【问题描述】:

我有一个如下的数据框:

A   B  C  D  E
g1  1 -10 20 text1
g2  0  0  0  text2
g3  0  1  0  text3
g4  0  0  0  text4

我想过滤掉所有 'B'、'C'、'D' 值为 0 的 g2 和 g4

我试过了

df = df[df[['B','C','D']]==0] 返回与输入相同的输出,

df = df[df[['B','C','D']].all(axis=1)==0] 也返回与输入相同的输出,

df = df.loc[df[['B','C','D']].isin(['0'])] return 'Cannot index with multi-dimensional key.

预期的输出是,

A   B  C  D  E
g1  1 -10 20 text1
g3  0  1  0  text3

这里有什么错误?

提前致谢。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您第二次尝试时最接近。在使用 all 之前比较为零。然后通过~ 运算符取负数:

    mask = (df[['B', 'C', 'D']] == 0).all(1)
    df = df[~mask]
    
    print(df)
    
        A  B   C   D      E
    0  g1  1 -10  20  text1
    2  g3  0   1   0  text3
    

    要了解此逻辑的工作原理,请注意将数据帧与标量进行比较会返回布尔数据帧:

    print(df[['B', 'C', 'D']] == 0)
    
           B      C      D
    0  False  False  False
    2   True  False   True
    

    然后您可以通过pd.DataFrame.all 按维度 1 折叠。语法和方法是从 NumPy 数组功能中借用的。

    【讨论】:

      猜你喜欢
      • 2020-07-14
      • 2020-05-20
      • 2018-11-22
      • 1970-01-01
      • 2019-12-25
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      相关资源
      最近更新 更多