Seb*_*ano 4 python dictionary loops group-by pandas
我有一个像这样的数据帧:
subject trial attended
0 1 1 1
1 1 3 0
2 1 4 1
3 1 7 0
4 1 8 1
5 2 1 1
6 2 2 1
7 2 6 1
8 2 8 0
9 2 9 1
10 2 11 1
11 2 12 1
12 2 13 1
13 2 14 1
14 2 15 1
Run Code Online (Sandbox Code Playgroud)
我试图为此定义一个函数,但它不起作用:
def count_attended():
sum_reactive = 0
dict_attended = {}
for i, g in reactive.groupby(['subject']):
for row in g:
if g['attended'][row] == 1:
sum_reactive += 1
if sum_reactive == 4:
dict_attended.update({g['subject'] : g['trial'][row]})
return dict_attended
return dict_attended
Run Code Online (Sandbox Code Playgroud)
我认为我不清楚如何在每个 GroupBy 数据帧内进行迭代。我是使用熊猫的新手。
IIUC尝试,
df = df.query('attended == 1')
df.loc[df.groupby('subject')['attended'].cumsum() == 4, ['subject', 'trial']].to_dict(orient='record')
Run Code Online (Sandbox Code Playgroud)
输出:
[{'subject': 2, 'trial': 9}]
Run Code Online (Sandbox Code Playgroud)
使用groupbywithcumsum将进行计数,然后检查此值何时等于 4 以创建布尔系列。您可以使用此布尔系列进行布尔索引以将数据框过滤到某些行。最后,通过锁定和列过滤选择主题和试验。