过滤具有 2 级列标题的 Pandas 数据框

用户16121440

我正在尝试使用相当标准的使用方式中的列表isin和掩码来过滤具有 2 级列标题的 Pandas 数据框,以重新调整新的过滤数据框。但是,我一直遇到围绕重叠索引名称的值错误,我似乎无法解决。

以下是我要过滤的列表以及数据框本身的示例。不确定如何提供生成此数据帧所需的代码,因为它是从 csv 文件导入的。

my_list = ['DEF', 'GHI']

+------+--------+----------+---+----------+---+
| CODE |  NAME  | STANDARD |   | ADVANCED |   |
+------+--------+----------+---+----------+---+
| CODE | NAME   | A        | B | A        | B |
+------+--------+----------+---+----------+---+
| ABC  | APPLE  | 1        | 1 | 2        | 2 |
| DEF  | BANANA | 3        | 3 | 4        | 4 |
| GHI  | KIWI   | 5        | 5 | 6        | 6 |
| JKL  | MANGO  | 7        | 7 | 8        | 8 |
+------+--------+----------+---+----------+---+

运行以下行进行过滤

new_df = df[df['CODE'].isin(my_list)]

返回

ValueError: cannot join with no overlapping index names

但是,如果我自己运行df['CODE'].isin(my_list),这似乎可以工作并返回Symbol带有 True/False 值列,这意味着将掩码应用于原始数据帧时会出现问题。

df 源代码

[{('CODE', 'CODE'): 'ABC',
  ('NAME', 'NAME'): 'APPLE',
  ('STANDARD', 'A'): 1,
  ('STANDARD', 'B'): 1,
  ('ADVANCED', 'A'): 2,
  ('ADVANCED', 'B'): 2},
 {('CODE', 'CODE'): 'DEF',
  ('NAME', 'NAME'): 'BANANA',
  ('STANDARD', 'A'): 3,
  ('STANDARD', 'B'): 3,
  ('ADVANCED', 'A'): 4,
  ('ADVANCED', 'B'): 4},
 {('CODE', 'CODE'): 'GHI',
  ('NAME', 'NAME'): 'KIWI',
  ('STANDARD', 'A'): 5,
  ('STANDARD', 'B'): 5,
  ('ADVANCED', 'A'): 6,
  ('ADVANCED', 'B'): 6},
 {('CODE', 'CODE'): 'JKL',
  ('NAME', 'NAME'): 'MANGO',
  ('STANDARD', 'A'): 7,
  ('STANDARD', 'B'): 7,
  ('ADVANCED', 'A'): 8,
  ('ADVANCED', 'B'): 8}]
亨利·埃克

看看是什么df['CODE'].isin(my_list)产生的:

    CODE
0  False
1   True
2   True
3  False

与单级索引相比:

my_list = ['DEF', 'GHI']

df = pd.DataFrame({
    'CODE': ['ABC', 'DEF', 'GHI', 'JKL']
})
print(df['CODE'].isin(my_list))
0    False
1     True
2     True
3    False
Name: CODE, dtype: bool

使固定

要么从 CODE 中获取索引:

new_df = df[df['CODE'].isin(my_list)['CODE']]

或者直接引用 MultiIndex:

new_df = df[df[('CODE', 'CODE')].isin(my_list)]

两者都产生:

new_df

  CODE    NAME STANDARD    ADVANCED   
  CODE    NAME        A  B        A  B
1  DEF  BANANA        3  3        4  4
2  GHI    KIWI        5  5        6  6

完整的工作示例:

import pandas as pd

my_list = ['DEF', 'GHI']

df = pd.DataFrame({
    ('CODE', 'CODE'): ['ABC', 'DEF', 'GHI', 'JKL'],
    ('NAME', 'NAME'): ['APPLE', 'BANANA', 'KIWI', 'MANGO'],
    ('STANDARD', 'A'): [1, 3, 5, 7], ('STANDARD', 'B'): [1, 3, 5, 7],
    ('ADVANCED', 'A'): [2, 4, 6, 8], ('ADVANCED', 'B'): [2, 4, 6, 8]
})

new_df = df[df[('CODE', 'CODE')].isin(my_list)]
print(new_df)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据具有值的 2 列过滤数据框

Python Pandas-如何使用键的存在来过滤具有包含字典的列的数据框?

数据框过滤每天的最高值,并将其再次保存在具有 2 列的数据框中

pandas concat比较具有相同列名的2个数据框如何构建不同的列?

连接2个具有不同列数的pandas数据框

在Pandas中合并2个具有匹配列的数据框

过滤数据框的行,其中所有指定的列在 Pandas 中都具有空值

具有pathlib路径过滤的pandas数据框

在 Pandas 中过滤具有多级列标题的列

Pandas 数据框过滤动态列

创建具有多列索引的Pandas数据框

从csv构建具有字典列的pandas数据框

Pandas Python:连接具有相同列的数据框

创建具有时差的新列(Pandas 数据框)

如何将具有多个行标题的Excel数据插入Pandas数据框

2个具有不同列的熊猫数据框

在第一级和第二级过滤具有多列索引的数据框

pandas DataFrame:在 2 列数据框中提取数据

如何遍历 2 列 Pandas 数据框数据?

根据 2 列过滤数据框

如何从具有日期时间列的过滤数据框中正确更新熊猫数据框

python pandas添加2个带有特定列的数据框

Python,Pandas 数据框,合并具有相同两列值的数据框的行并聚合行中的数据

如何在没有列标题的情况下将pandas数据框转换为字典?

将字典中的键从dict添加到现有Pandas数据框中的列标题

在没有标题的情况下获取pandas数据框中的列长

将pandas多索引数据框转换为具有所有索引列的简单数据框

以编程方式在多个列上过滤具有单个条件的Pandas数据框

具有多级列的pandas数据框中的数据透视表