为什么在使用.iloc函数定义新列时需要添加:



当我们在pandas中创建一个新列

df["Max"] = df.iloc[:, 5:7].sum(axis=1)

如果我们只得到从索引5到索引7的列,为什么我们需要传递:作为所有的列。

pandas.DataFrame.iloc()纯粹用于基于整数位置的索引,用于根据位置进行选择(阅读这里的文档)。:表示所选列中的所有行,这里是列索引5和6 (iloc不包括最后一个索引)。

您正在使用.iloc()从数据框中取出一个切片,并跨该切片的列应用聚合函数。

考虑一个例子:

df = pd.DataFrame({"a":[0,1,2],"b":[2,3,4],"c":[4,5,6]})
df

将产生以下数据帧

a  b  c
0  0  2  4
1  1  3  5
2  2  4  6

您正在使用iloc来避免处理命名列,因此

df.iloc[:,1:3]

的格式如下

b  c
0  2  4
1  3  5
2  4  6

现在稍微修改一下代码,就会得到一个包含各列之和的新列

df.iloc[:,1:3].sum(axis=1)
0     6
1     8
2    10

或者你可以使用function application:

df.apply(lambda x: x.iloc[1:3].sum(), axis=1)
0     6
1     8
2    10
因此,您显式地告诉跨列应用sum。但是,您的语法更简洁,比显式函数应用程序更可取。结果与人们所期望的一样。

相关内容

  • 没有找到相关文章

最新更新