【问题标题】:Write rows into new dataframes [duplicate]将行写入新数据帧[重复]
【发布时间】:2018-01-11 05:20:11
【问题描述】:

这里有 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 个新数据帧,每个数据帧如下所示:

组织 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

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

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2023-04-03
      • 1970-01-01
      • 2020-10-06
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多