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循环子集化的熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章