为了账号安全,请及时绑定邮箱和手机立即绑定

根据当前数组中每个项目的第一个元素创建新数组

根据当前数组中每个项目的第一个元素创建新数组

至尊宝的传说 2022-06-22 18:21:04
如果我的术语不正确,请原谅我 - 我是新手!我试图根据数组中每个项目中第一个元素的值来隔离某些条目,并对某些列执行一些操作。这是我正在使用的数据类型的示例:[[1, 99, 400],[1, 95, 200],[2, 92, 100],[1, 85, 500],[2, 88, 300]]对于每个条件,我需要分别使用 a for loop、if statement和算术计算第 2 列和第 3 列的平均值(反映在第 1 列中,其中值为 1 或 2)。我正在尝试将上述数组拆分为每个条件的两个单独的数组,然后使用numpy.mean. 这是我希望列表的样子:cond1 = [[1, 99, 400], [1, 95, 200], [1, 85, 500]]cond2 = [[2, 92, 100], [2, 88, 300]]我坚持如何根据第一个元素将这些条件分成两个新数组。这是我在谷歌上搜索切片后得到的最远距离……但我被卡住了!for x in stim:    if stim_acc[0]==1.0:        np.where(stim_acc[0] = 1.0)        cond1 = [[s,a,rt] for s, a, rt in zip(stim, acc, mrt)]        print(cond1)关于stim,acc和mrt:我有几列长的数据集,从中我将刺激(现在stim)、准确性(现在acc)和平均反应时间(现在mrt)条目分离到一个新列表中(本文中的第一个)。我这样做是这样的:stim = data[:,1] acc = data[:,3] mrt = data[:,4] stim_acc = [[s, a, rt] for s, a, rt in zip(stim, acc, mrt)] print(stim_acc)我先发制人地命名了新列表stim_acc,因为我预见到它会变成一个列表,计算循环中每个条件的准确性。谢谢,非常感谢您的帮助。
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

据我了解,您想按索引 [0] 的值将列表拆分为两个列表。如果是 1 则添加到cond1' 列表中,否则添加到cond2' 列表中。您可以使用以下代码实现此目的:


cond1=[]

cond2=[]

for item in listoflists:

    if item[0] == 1:

        cond1.append(item)

    else 

        cond2.append(item)


查看完整回答
反对 回复 2022-06-22
?
慕慕森

TA贡献1856条经验 获得超17个赞

使用简单的循环,您可以显示如下方式:


data=[[1, 99, 400],

[1, 95, 200],

[2, 92, 100],

[1, 85, 500],

[2, 88, 300]]


groups = [], []

for row in data:

    groups[row[0]-1].append(row)


for group in groups:

    print(np.mean(group, axis=0))  # means of each column by group

但是对于这种类型的任务,通常最好使用 pandas 数据框


df = pd.DataFrame(data, columns=["stim", "acc", "mrt"])

for value in df.stim.unique():

    print(df[df.stim == value].mean())

或者


for i, group in df.groupby("stim"):

    print(i, group.mean())

(我假设您想要每个组中每列的平均值。)


查看完整回答
反对 回复 2022-06-22
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

使用熊猫groupby:


>>> a = [[1, 99, 400],

 [1, 95, 200],

 [2, 92, 100],

 [1, 85, 500],

 [2, 88, 300]]

>>> df = pd.DataFrame(a)

>>> df

   0   1    2

0  1  99  400

1  1  95  200

2  2  92  100

3  1  85  500

4  2  88  300

>>> data = df.groupby([0])

>>> cond = data.groups

>>> df.loc[cond[1]]

   0   1    2

0  1  99  400

1  1  95  200

3  1  85  500

>>> df.loc[cond[2]]

   0   1    2

2  2  92  100

4  2  88  300


查看完整回答
反对 回复 2022-06-22
  • 3 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信