如何在堆栈中拆分行并为熊猫中的每一行执行"选择"?



我的 CSV 文件中有 100 行,我需要将它们分成 10 行并为每个堆栈执行一些查询,因为有些行有特定的列,有些没有。 如何在熊猫中做到这一点?

1      blue     1      NaN
2    yellow     0      NaN
3    yellow     1      NaN
4      blue     1      NaN
5      blue     1      NaN
6      blue     0      NaN
7    yellow     1      NaN
8    yellow     1      NaN
9    yellow     1      NaN
10     blue     0      NaN
11    yellow     NaN      1
12      blue     NaN      1
13    yellow     NaN      1
14    yellow     NaN      0
15      blue     NaN      1
16    yellow     NaN      1
17    yellow     NaN      0
18      blue     NaN      1
19      blue     NaN      0
20      blue     NaN      1

我使用 PsychoPy 执行神经科学任务,该任务有 10 次试验,因为 PsychoPy 将 RT(反应时间(存储在不同的 10 列中,所以我需要访问它们,例如在第一次试验中评估蓝色圆圈,他们的 RT 是 1 或第二次试验中的黄色圆圈,他们的 RT 为 0。

我只是重新组织您的数据以便于访问。 鉴于所有柱线之一的反应时间列都是空的,只需将它们相加以即可在单个列reaction_time中得到非空值。 然后通过1 + df.index // trials分配一个新的trial列。

现在,您可以使用.loc通过trialcolor访问reaction_time数据。

# Sample data.
nan = np.nan
df = pd.DataFrame(
{'color': ['blue', 'yellow', 'yellow', 'blue', 'blue', 'blue', 'yellow', 'yellow', 'yellow', 'blue', 'yellow',  'blue', 'yellow', 'yellow', 'blue', 'yellow', 'yellow', 'blue', 'blue', 'blue'],
'num_1': [1, 0, 1, 1, 1, 0, 1, 1, 1, 0] + [nan] * 10,
'num_2': [nan] * 10 + [1, 1, 1, 0, 1, 1, 0, 1, 0, 1]}
)
# Summary data result.
trials = 10
reaction_time = df.iloc[:, 1:].sum(axis=1)
df2 = df[['color']].assign(
reaction_time=reaction_time,
trial=1 + df.index // trials,
)
>>> df2
color  reaction_time  trial
0     blue            1.0      1
1   yellow            0.0      1
2   yellow            1.0      1
3     blue            1.0      1
4     blue            1.0      1
5     blue            0.0      1
6   yellow            1.0      1
7   yellow            1.0      1
8   yellow            1.0      1
9     blue            0.0      1
10  yellow            1.0      2
11    blue            1.0      2
12  yellow            1.0      2
13  yellow            0.0      2
14    blue            1.0      2
15  yellow            1.0      2
16  yellow            0.0      2
17    blue            1.0      2
18    blue            0.0      2
19    blue            1.0      2
# Query data.
>>> df2.loc[df2.trial.eq(2) & df2.color.eq('yellow')]
color  reaction_time  trial
10  yellow            1.0      2
12  yellow            1.0      2
13  yellow            0.0      2
15  yellow            1.0      2
16  yellow            0.0      2

batches = [df.loc[i:i+10] for i in range(0, df.shape[0], 10)]

for batch in batches:
select_function()

相关内容

  • 没有找到相关文章

最新更新