我的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列中,因此我需要访问它们,例如在其RTs为1的第一个试验中评估蓝色圆圈或第二次试用中的黄色圆圈,其RT为0。

最佳答案

我只是重新整理您的数据以便于访问。假设所有反应时间列之一都为空,则将它们加起来即可在单个列reaction_time中获得非空值。然后通过trial分配一个新的1 + df.index // trials列。

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

# 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

关于python - 如何在堆栈中拆分行并为 Pandas 中的每个单例执行“选择”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59584358/

10-12 00:30
查看更多