【问题标题】:how to create unique pandas dataframes while iterating over a list如何在迭代列表时创建唯一的熊猫数据框
【发布时间】:2018-07-07 07:03:26
【问题描述】:

使用以下列表和数据框,我想遍历日期列表并为列表和数据框中的每个日期创建一个新的数据框。

列表:

['12/12/2017', '12/13/2017', '12/14/2017']

数据框:

source  time        date
0      a  8:00  12/12/2017
1      b  9:00  12/13/2017
2      c  8:30  12/12/2017
3      b  8:05  12/14/2017
4      a  8:10  12/13/2017
5      a  8:15  12/12/2017

期望的输出:

source  time        date
0      a  8:00      12/12/2017
2      c  8:30      12/12/2017
5      a  8:15      12/12/2017

...等每个日期。

代码:

import pandas as pd

unique_dates=['12/12/2017','12/13/2017','12/14/2017']

data=[['a','8:00','12/12/2017'],['b','9:00','12/13/2017'],['c','8:30','12/12/2017'],
      ['b','8:05','12/14/2017'],['a','8:10','12/13/2017'],['a','8:15','12/12/2017']]
headers=['source','time','date']
df=pd.DataFrame(data,columns=headers)

for item in unique_dates:
    if item in df:
        new_df=df[df['date']==item]
        print(new_df)

这没有给我任何输出。我不知道如何做到这一点,任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x list pandas iteration


    【解决方案1】:

    一旦您将其识别为groupby 操作的良好用例,解决此问题就变得很简单。您需要做的就是使用isin 进行预过滤,然后进行分组和迭代。

    df_list = [g for _, g in df[df.date.isin(unique_dates)].groupby('date')]
    

    如果您想要一个按日期索引的字典,请在 groupby 对象上调用 dict -

    df_dict = dict(list(df[df.date.isin(unique_dates)].groupby('date')))
    

    或者,使用字典理解 -

    df_dict = {i : g for i, g in df[df.date.isin(unique_dates)].groupby('date')}
    

    print(*df_list, sep='\n\n')
    
      source  time        date
    0      a  8:00  12/12/2017
    2      c  8:30  12/12/2017
    5      a  8:15  12/12/2017
    
      source  time        date
    1      b  9:00  12/13/2017
    4      a  8:10  12/13/2017
    
      source  time        date
    3      b  8:05  12/14/2017
    

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2017-02-13
      • 1970-01-01
      • 2021-07-20
      • 2020-07-30
      • 1970-01-01
      • 2021-06-08
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多