将行写入新的数据帧

2024-06-30 15:59:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想做的是遍历dataframe中的每一行,确定该行属于哪个组织(例如Brad属于org1,Daniel属于org3),然后我想将该行写入一个新的dataframe。在本例中,我希望有3个新的数据帧,每个数据帧如下所示:

组织1:

In [3]: print (org1)

       first_name                    email      organization
0            Brad           brad@gmail.com              org1
1         Michael        michael@gmail.com              org1 

组织机构2:

In [4]: print (org2)

       first_name                    email      organization
0           Jared          jared@gmail.com              org2 
1           Jaime          jaime@gmail.com              org2 

组织3:

In [3]: print (org3)

       first_name                    email      organization
0          Daniel         daniel@gmail.com              org3

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

循环第一次遇到值时,我希望它创建一个全新的数据帧。之后,任何具有相同值的后续行都应该被添加到该行中,而不是完全创建一个新的行。任何帮助(以及理解循环如何在数据帧中工作的智慧)都将不胜感激。你知道吗


Tags: 数据nameincomemailgmailfirstprint
1条回答
网友
1楼 · 发布于 2024-06-30 15:59:43

选项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()}

相关问题 更多 >