当我们在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
。但是,您的语法更简洁,比显式函数应用程序更可取。结果与人们所期望的一样。