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

这是示例数据框


ID,IS,Val1,Val2,Val3

1,100,11,9,1

2,101,3,15,16

3,99,10,18,3

1,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)]


浮云间
浏览 149回答 2
2回答

UYOU

您的代码df2是从标题为Val2并且Val3仅的列中选择,但只要您的代码df1仍然包含,Val1那么您仍然会Val1在输出中看到。如果您使用列标题来索引数据并将新列添加到同一数据框中,可能更容易看到发生了什么。group1 = df[["Val1", "Val2", "Val3"]] # find the min among these 3 colsgroup2 = df[["Val2", "Val3"]]   # find the min among only these 2 colsdf["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 valuesfiltered2 = df.loc[12 > df.min2]  # Val3, Val3 contain the minimum values

料青山看我应如是

你的布尔条件对每一行都返回 true,这就是为什么你有相同的结果34 > df.iloc[:, 3:].min(1)Out[202]: 0    True1    True2    True3    Truedtype: bool34 > df.iloc[:, 1:].min(1)Out[203]: 0    True1    True2    True3    Truedtype: booliloc 按位置对数据帧进行切片df.iloc[:, 1:]Out[204]:     IS  Val1  Val2  Val30  100    11     9     11  101     3    15    162   99    10    18     33   97    29    25    26
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python