如何在迭代列表时创建唯一的pandas数据帧

时间:2018-01-28 13:19:59

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

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

列表:

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

dataframe:

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)

这给了我没有输出。我不知道如何做到这一点,任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

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

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

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

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