迭代 groupby 数据帧以在每一行中操作
Posted
技术标签:
【中文标题】迭代 groupby 数据帧以在每一行中操作【英文标题】:Iterate over a groupby dataframe to operate in each row 【发布时间】:2020-09-07 02:34:05 【问题描述】:我有一个这样的数据框:
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
-
我想分组主题。
然后迭代 GroupBy 数据帧的每一行。
如果对于一行 'attended' == 1,则将变量 sum_reactive 增加 1。
如果 sum_reactive 变量达到 == 4,则在字典中添加变量 sum_reactive 达到值 4 的“subject”和“trial”。
我试图为此定义一个函数,但它不起作用:
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
我认为我不清楚如何在每个 GroupBy 数据框中进行迭代。我是使用熊猫的新手。
【问题讨论】:
【参考方案1】:IIUC 试试,
df = df.query('attended == 1')
df.loc[df.groupby('subject')['attended'].cumsum() == 4, ['subject', 'trial']].to_dict(orient='record')
输出:
['subject': 2, 'trial': 9]
使用 groupby
和 cumsum
将进行计数,然后检查该值何时等于 4 以创建布尔系列。您可以使用此布尔系列进行布尔索引以将数据框过滤到某些行。最后,使用锁定和列过滤选择主题和试验。
【讨论】:
您应该首先放弃所有无人参与的试验。否则,您的输出将包括正确输出之后的输出。 @QuangHoang 我明白了。谢谢!以上是关于迭代 groupby 数据帧以在每一行中操作的主要内容,如果未能解决你的问题,请参考以下文章
循环遍历多个 panda 数据帧以在 Python 中获取多个数据帧输出
我正在使用 Python 创建一个 lambda 以在 s3 存储桶中创建一个文件,但它只创建一行。需要基于迭代的创建