将行写入新的数据帧

时间:2018-01-10 21:15:10

标签: python pandas dataframe

这里有大熊猫的新程序员。我正在努力将带有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

如何创建循环,遍历原始数据框中的每一行,通过特定列中的值标识要写入的数据帧,然后实际将其写入数据框?

第一次循环遇到值时,我希望它创建一个全新的数据帧。之后,任何具有相同值的后续行都应添加到其中 - 而不是完全创建新行。非常感谢任何帮助(以及了解循环如何在数据框架方面工作的智慧)。

1 个答案:

答案 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()}
相关问题