您可以通过将索引列表传递给
.iloc
从DataFrame中选择特定列,例如:
df.iloc[:, [2,5,6,7,8]]
将返回一个数据框,其中包含这些编号的列(注意:这里采用0索引,因此2
表示第3列)。
要对该列进行均值下降,您可以使用:
# Mean along 0 (vertical) axis: return mean for specified columns, calculated across all rows
df.iloc[:, [2,5,6,7,8]].mean(axis=0)
要对该列进行平均值计算,您可以使用以下方法:
# Mean along 1 (horizontal) axis: return mean for each row, calculated across specified columns
df.iloc[:, [2,5,6,7,8]].mean(axis=1)
您也可以为两个轴提供具体的索引来返回表格的子集:
df.iloc[[1,2,3,4], [2,5,6,7,8]]
针对您的具体示例,您可以执行以下操作:
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.array([[1,2,3,0,5],[1,2,3,4,5],[1,1,1,6,1],[1,0,0,0,0]]),
columns=["a","b","c","d","q"],
index = [0,1,2,3]
)
df.iloc[ [0,2,3], [0,1,3] ].mean(axis=0)
这将输出:
a 1.0
b 1.0
d 2.0
dtype: float64
或者,要通过列名称访问,请先在这些列上进行选择:
df[ ['a','b','d'] ].iloc[ [0,1,3] ].mean(axis=0)
回答你在评论中提出的第二个问题,你可以使用pd.concat
将多个数据帧合并在一起。将这些数据帧累积到一个列表中,然后一次性传递给pd.concat
会更快,例如:
dfs = []
for ix in idxs:
dfm = df.iloc[ [0,2,3], ix ].mean(axis=0)
dfs.append(dfm)
dfm_summary = pd.concat(dfs, axis=1)