python - 重置索引后无法过滤索引列中包含特定值的行

标签 python pandas filter

我正在组织多个计划的数据,其中包含计划的阶段信息,P(初步)或F(最终)。我正在使用 examples 中所示的方法在 pandas 文档中。

df1 = pd.read_excel('FilePath', sheetname = 'ForFilter')
df1


landuse_SUB_ID  TYPE    RECD_DATE   PHASE   LAND_USE    CPACTIONDA
0   24  1   2000-04-07  P   ROW 2000-05-04
1   24  1   2000-04-07  P   NONE    2000-05-04
2   25  1   2000-08-10  P   COMM    2000-09-08
3   34  1   2000-04-14  F   REC 2000-04-14
4   34  1   2000-04-14  F   SFD 2000-04-14
5   35  1   2000-01-20  P   NONE    2000-02-02
6   42  1   2000-04-04  P   SFD 2000-05-01
7   42  1   2000-12-06  P   SFD 2001-01-03
8   43  1   2000-09-07  P   NONE    2000-09-21
9   51  1   2000-11-10  P   NONE    2000-11-28
10  53  1   2000-02-22  F   SFD 2000-02-22

在使用示例中的方法(使用 likeregex)之后,在我看来,这些方法只能过滤索引列中的值。因此我更改了索引:

df1_filter1 = df1.set_index('PHASE')


landuse_SUB_ID  TYPE    RECD_DATE   LAND_USE    CPACTIONDA
PHASE                   
P   24  1   2000-04-07  ROW 2000-05-04
P   24  1   2000-04-07  NONE    2000-05-04
P   25  1   2000-08-10  COMM    2000-09-08
F   34  1   2000-04-14  REC 2000-04-14
F   34  1   2000-04-14  SFD 2000-04-14
P   35  1   2000-01-20  NONE    2000-02-02
P   42  1   2000-04-04  SFD 2000-05-01
P   42  1   2000-12-06  SFD 2001-01-03
P   43  1   2000-09-07  NONE    2000-09-21
P   51  1   2000-11-10  NONE    2000-11-28
F   53  1   2000-02-22  SFD 2000-02-22

现在数据框使用Phase作为索引,我使用like方法来过滤df1_filter1:

df1_filter1.filter(like = 'F', axis = 0)

我收到错误

"ValueError: cannot reindex from a duplicate axis"

这对我来说似乎是一个非常简单的操作,所以我只是想知道我做错了什么导致了这个错误。对于我的问题,最好的方法是什么(最少的步骤和最干净的代码)。

最佳答案

filter 可能直观上感觉像是正确的函数,但您几乎肯定应该使用 loc过滤您的数据(在上面的示例链接上,它在一个大黄色框中显示“另请参阅:loc”)。对于这个简单的示例,您还可以使用 bool 索引:

>>> df1.loc[df1['PHASE'] == 'F']  # or boolean indexing via df1[df1['PHASE'] == 'F']
    landuse_SUB_ID  TYPE   RECD_DATE PHASE LAND_USE  CPACTIONDA
3               34     1  2000-04-14     F      REC  2000-04-14
4               34     1  2000-04-14     F      SFD  2000-04-14
10              53     1  2000-02-22     F      SFD  2000-02-22

关于python - 重置索引后无法过滤索引列中包含特定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52321121/

相关文章:

python - 如何使用 python Flask 将修改后的图像直接上传到 s3 存储桶

python - 如果在数据帧列中找到则返回字符串的关键字

python - 格式化数据集的问题

javascript - 从对象数组中提取每个对象的属性值并将其放入不同的数组中

filter - Android Studio Logcat 过滤器不显示

python - 如果通过 strcpy() 获取用户输入,用户输入是否会被复制到超出空格或空字符的堆栈上

python - 有没有办法记录重试次数

python - 如何让 WebDriverWait 查找特定号码

python - Polars - 将列中少于 X 个唯一值的值替换为不同的特定值

java - 如何在java spring boot中通过localDateTime过滤对象?