gpt4 book ai didi

Python:以另一列为条件的数据框中列表的逐元素平均值

转载 作者:行者123 更新时间:2023-11-28 20:35:39 26 4
gpt4 key购买 nike

我有一个看起来像这样的数据框,包含三列(10 种不同的刺激、16 次试验和一个包含等长列表的数据列)。我只是想根据刺激获得数据列的逐元素平均值。由于我有 10 种不同的刺激,它应该为每种刺激产生 10 个数组,这也是试验中所有数据数组的平均值。

enter image description here

我想过这样的事情,但它让我觉得很奇怪。

df.groupby('stimulus').apply(np.mean)
>> IndexError: tuple index out of range

enter image description here


构建我的数据框

trial_vec       = np.tile(np.arange(16)+1, 10)     
stimulus_vec = np.repeat([-2., -1.75, -1., -0.75, -0.5, 0.5, 1., 1.25, 1.75, 2.5 ], 16)
data_vec = np.random.randint(0, 16, size=160)
df = pd.DataFrame({'trial': trial_vec, 'stimulus': stimulus_vec, 'data': data_vec}).astype('object')
df["data"] = [np.random.rand(4).tolist() for i in range(160)]
df

最佳答案

您可以将每个组中的 data 转换为二维列表,这确保对象可以转换为二维 numpy 数组当数据列的每个单元格中的元素数量相同时,然后将 mean 置于 axis=0 之上(按列平均):

df.groupby('stimulus').data.apply(lambda g: np.mean(g.values.tolist(), axis=0))

#stimulus
#-2.00 [0.641834320107, 0.427639804593, 0.42733812964...
#-1.75 [0.622484839138, 0.529860126072, 0.63310754064...
#-1.00 [0.546323060494, 0.465573022088, 0.54947320390...
#-0.75 [0.431675052484, 0.367636755052, 0.45263194597...
#-0.50 [0.423135952819, 0.544110613089, 0.55496058720...
# 0.50 [0.421858616927, 0.439204977418, 0.43153540636...
# 1.00 [0.612239664017, 0.499305567037, 0.46284515082...
# 1.25 [0.498544756769, 0.481073640317, 0.43564801829...
# 1.75 [0.51821909334, 0.44904063908, 0.358509374567,...
# 2.50 [0.465606275355, 0.516448419224, 0.33715002349...
#Name: data, dtype: object

或者将 stack 数据作为二维数组,然后将 mean 覆盖在 axis=0 上:

df.groupby('stimulus').data.apply(lambda g: np.mean(np.stack(g), axis=0))

编辑:如果你在data列中有nan,你可以使用np.nanmean来计算没有meannan:

df.groupby('stimulus').data.apply(lambda g: np.nanmean(np.stack(g), axis=0))

关于Python:以另一列为条件的数据框中列表的逐元素平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com