为了账号安全,请及时绑定邮箱和手机立即绑定

使用熊猫选择数据的问题。国际劳工组织

使用熊猫选择数据的问题。国际劳工组织

浮云间 2021-06-11 15:09:04
这是示例数据框ID,IS,Val1,Val2,Val31,100,11,9,12,101,3,15,163,99,10,18,31,97,29,25,26我还使用 idxmin 来计算每一行的最小值,当我找到最小值时,我想检查与该列对应的最小值是否小于某个数字,如果是,那么我想包括否则我想去掉它。这就是我在stack overflow的帮助下所做的。df1 = df.set_index('ID').iloc[:,1:].idxmin(axis=1).reset_index(name= 'New')df2 = df1.loc[34 > df.iloc[:, 1:].min(1)]我得到了这个结果ID   New 1  Val3 2  Val1 3  Val3 1  Val2当我使用此代码时,我也得到了相同的结果df2 = df1.loc[34 > df.iloc[:, 3:].min(1)] # 在这段代码中,我从 Val2 开始我的专栏,但它仍然给出相同的结果(包括 Val1)ID   New 1  Val3 2  Val1 3  Val3 1  Val2为什么即使我从第三列中选择,也得到相同的结果?这行代码到底在做什么?df1.loc[34 > df.iloc[:, 1:].min(1)]
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您的代码df2是从标题为Val2并且Val3仅的列中选择,但只要您的代码df1仍然包含,Val1那么您仍然会Val1在输出中看到。


如果您使用列标题来索引数据并将新列添加到同一数据框中,可能更容易看到发生了什么。


group1 = df[["Val1", "Val2", "Val3"]] # find the min among these 3 cols

group2 = df[["Val2", "Val3"]]   # find the min among only these 2 cols

df["min1"] = group1.min(axis=1)

df["col1"] = group1.idxmin(axis=1)

df["min2"] = group2.min(axis=1)

df["col2"] = group2.idxmin(axis=1)


filtered1 = df.loc[12 > df.min1]  # Val3, Val1, Val3 contain the minimum values

filtered2 = df.loc[12 > df.min2]  # Val3, Val3 contain the minimum values


查看完整回答
反对 回复 2021-06-29
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

你的布尔条件对每一行都返回 true,这就是为什么你有相同的结果


34 > df.iloc[:, 3:].min(1)

Out[202]: 

0    True

1    True

2    True

3    True

dtype: bool

34 > df.iloc[:, 1:].min(1)

Out[203]: 

0    True

1    True

2    True

3    True

dtype: bool

iloc 按位置对数据帧进行切片


df.iloc[:, 1:]

Out[204]: 

    IS  Val1  Val2  Val3

0  100    11     9     1

1  101     3    15    16

2   99    10    18     3

3   97    29    25    26


查看完整回答
反对 回复 2021-06-29
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信