For循环子集化的熊猫数据框

Posted

技术标签:

【中文标题】For循环子集化的熊猫数据框【英文标题】:For loop over subsetted pandas dataframe 【发布时间】:2018-08-20 22:21:07 【问题描述】:

我正在尝试迭代地创建数据框的子集。一个玩具例子:

In:

   A  B  participant  
0  1  3            1          
1  2  4            1         
2  5  8            2          
3  4  9            2
4  3  7            3

(条件语句感谢下方评论者)

for p in df:
    subset = df[df['participant'] == p].loc[: , 'A']

期望的结果是:

   A  participant  
0  1            1          
1  2            1

   A  participant  
0  5            2          
1  4            2   

等等

但是 for 循环按行而不是参与者创建子集。如何获得每个参与者的子集?

最初的尝试:

for p in df:
    p.pressure = df[(:, 'pressure') & (df['participant'] == p)]

【问题讨论】:

好的,谢谢,但看起来我现在循环的是列标题而不是扬声器? 可以将其更改为for p in df['participant'],但我觉得这是XY Problem。你想做什么?可能有一个更简单的解决方案,可能使用groupby() 我想知道如何每次使用相同的标准迭代地对数据帧进行子集化。在此示例中,for 循环应为每个参与者提供所有压力值的子集。当前语法给出了重复的子集。 你能举一个具体的例子,包括样本输入和期望的输出吗?尝试提供minimal reproducible example。更多关于how to create good reproducible pandas examples. 用上面的玩具数据框编辑的问题 【参考方案1】:

这是一种方法。

首先获取参与者的唯一值:

participants = df['participant'].unique()
#array([1, 2, 3])

现在为每个参与者创建一个数据框。在这个例子中,我会将每个 DF 存储在一个字典中,由参与者编号作为键。

output_dfs = p: df[df['participant'] == p] for p in participants
for p in output_dfs:
    print("Participant = %s"%p)
    print(output_dfs[p])
    print("")

哪些打印:

Participant = 1
   A  B  participant
0  1  3            1
1  2  4            1

Participant = 2
   A  B  participant
2  5  8            2
3  4  9            2

Participant = 3
   A  B  participant
4  3  7            3

【讨论】:

以上是关于For循环子集化的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 for 循环中附加熊猫数据框中的行?

如何使用 for 循环过滤熊猫数据框中的观察结果?

我如何在python中使用for循环制作熊猫数据框对象

如何从 for 循环构建和填充熊猫数据框? [复制]

如何使用for循环或条件在pandas数据框的子集中创建多个回归模型(statsmodel)?

在 for 循环中创建和命名熊猫系列