python - 根据已知行标签而不是值从数据框中删除行
问题描述
我有一个数据框,它是 LinearRegression() 调用的输出,如下所示:
coeff_df =
Coefficient
pm 0.8297072586069981
sen 0.8199381072144118
tem 0.7483758123794492
no 0.2825715519743024
s_ref -0.4376018493604922
ref -0.02338361622015777
我想删除我认为不重要的系数,例如:
coeff_df_abs = abs(coeff_df)
highestcoeff = coeff_df_abs.max()
lowestcoeff = coeff_df_abs.min()
if highestcoeff[0] / lowestcoeff[0] > 10
#delete lowestcoeff from coeff_df
我可以获得一个具有 nans 的新数据帧(或 .dropnans 仅用于 1x1 数据帧)
new_coeffs = coeff_df[coeff_df_abs==coeff_df_abs.min()]
#output
Coefficient
pm25
sen
tem
no
s_ref
ref -0.023383616220157777
然后如何从原始数据帧 coeff_df 中删除 new_coeffs 中的一个非 nan 单元格?
请注意,我无法利用数据框单元格的值,因为我实际上是在测试接近 0 而不是 > 或 < 0 并且我不知道哪些单元格是负数或正数。
谢谢!
编辑:我要补充说的是,实际意图是仅使用通过我的测试的系数来调用新的线性回归,所以如果我能得到一些可以变成列表以传递回我的 X,y 的东西,则可以加分数据框,例如。
possible_Xvars = ['pm','sen','tem']
X = dataset[possible_xvars].values #this already works in my code, just for clarity of ultimate goal
解决方案
然后如何从原始数据帧 coeff_df 中删除 new_coeffs 中的一个非 nan 单元格?
假设第一列是您的索引,您可以简单地使用
coeff_df.drop(new_coeffs.index)
这相当于
coeff_df.drop(labels=new_coeffs.index, axis='index')
其中labels
是标签名称或此类名称的列表,并axis
定义指定标签是出现在索引(行)还是数据框的列中。另见:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html
一般来说,使用 index 属性也可能是您问题第二部分的答案。该index.tolist()
方法生成一个包含数据框中所有现有标签名称的列表。所以,你正在寻找的应该是:
possible_Xvars = new_coeffs.index.tolist()
推荐阅读
- java - Java 不允许我使用记录
- json - 当内容类型不是“application/json”时,如何在 Rocket 中解析 JSON 正文?
- java - 使用断言语句来验证项目没有添加到购物车,slenium
- java - 如何将我的阵列从 1 行更改为 20x20 正方形?(爪哇)
- bash - 简单的 bash 脚本无法正确 cron
- r - 子矩阵的最大行列式
- html - 试图将带有 html + scss 的站点部署到 gitlab,但不知道该怎么做
- html - Abosultely 位置表在页面末尾被截断
- python - 有没有办法在不使用字典的情况下计算列表中字符串的出现次数?
- r - 等效于 R 中用于 logit 回归的 SignifReg 函数?