计算熊猫意味着从嵌套 numpy 数组中给出的行号



我已经在这个问题上停留了很长时间,找不到类似的东西,所以我不胜感激一些提示。我有两个数据帧;df1~1,200,000 行,df2对于df2中的 500 行中的每一行,我都有一组行号,对应于df1中的值,存储在 numpy 数组中。对于每一行,我想根据指示的行号计算df1的平均值,并将其添加到df2中。 下面是一个示例,假设df2只有三行。

some_array = np.array([102, 562, 132467, 4345, 122],
[53693, 562, 333, 6454, 2456],
[102, 562, 132467, 1666, 222])

因此,对于some_array中的每一行,我想使用指定的行号计算df1均值集。因此,在这种情况下,第一行df2将是

df2.iloc[0] = df1.iloc[some_array[0]].mean()

但对于some_array中的所有行.我可以通过迭代方法轻松解决此问题,但不幸的是它太慢了。我真的无法理解更快的方法。

任何帮助将不胜感激,我希望问题清楚!

IIUC,你可以做这样的事情:

some_array = np.array([[1,2,3,4],
[0,1,2,3],
[2,3,4,5]])
df = pd.DataFrame(np.arange(18).reshape(6,-1))
groups = np.repeat(np.arange(some_array.shape[0]), some_array.shape[1])
df.iloc[some_array.ravel()].groupby(groups).apply(lambda x: x.mean(1))

输出:

0  1     4.0
2     7.0
3    10.0
4    13.0
1  0     1.0
1     4.0
2     7.0
3    10.0
2  2     7.0
3    10.0
4    13.0
5    16.0
dtype: float64

或者,如果您不需要将原始行号保留在some_array中,您可以执行以下操作:

(df.iloc[some_array.ravel()]
.groupby(groups)
.apply(lambda x: x.mean(1).reset_index(drop=True))
)

输出:

0     1     2     3
0  4.0   7.0  10.0  13.0
1  1.0   4.0   7.0  10.0
2  7.0  10.0  13.0  16.0

最新更新