这里有大熊猫的新程序员。我正在努力将带有pandas数据帧的行分成新的数据帧。我的数据框看起来像这样:
In [1]: print (df)
first_name email organization
0 Brad brad@gmail.com org1
1 Jared jared@gmail.com org2
2 Daniel daniel@gmail.com org3
3 Michael michael@gmail.com org1
4 Jaime jaime@gmail.com org2
我想要做的是遍历数据框中的每一行,确定该行属于哪个组织(例如,Brad属于org1,Daniel属于org3),然后我想将该行写入新数据框。在这种情况下,我想要有3个新的数据帧,每个数据帧看起来如下所示:
ORG1:
In [3]: print (org1)
first_name email organization
0 Brad brad@gmail.com org1
1 Michael michael@gmail.com org1
ORG2:
In [4]: print (org2)
first_name email organization
0 Jared jared@gmail.com org2
1 Jaime jaime@gmail.com org2
Org3:
In [3]: print (org3)
first_name email organization
0 Daniel daniel@gmail.com org3
如何创建循环,遍历原始数据框中的每一行,通过特定列中的值标识要写入的数据帧,然后实际将其写入数据框?
第一次循环遇到值时,我希望它创建一个全新的数据帧。之后,任何具有相同值的后续行都应添加到其中 - 而不是完全创建新行。非常感谢任何帮助(以及了解循环如何在数据框架方面工作的智慧)。
答案 0 :(得分:2)
选项1
groupby
orgs = []
for _, g in df.groupby('organisation', as_index=False):
orgs.append(g)
或者,
orgs = [g for _, g in df.groupby('organization', as_index=False)]
现在,orgs
是一个数据框列表,每个组织一个。
或者,如果您希望结果为dict
,请使用 -
orgs = {i : g for i, g in df.groupby('organization', as_index=False)}
现在,要访问org1
的数据框,请致电orgs['org1']
。
选项2
另一种选择是使用pd.Series.unique
-
orgs = []
for o in df.organization.unique():
orgs.append(df.query('organization == @o'))
或者,
orgs = [df.query('organization == @o') for o in df.organization.unique()]
或者,
orgs = { o : df.query('organization == @o') for o in df.organization.unique()}