Python 使用循环函数将数据帧过滤到数据帧列表中

Python 使用循环函数将数据帧过滤到数据帧列表中,python,pandas,for-loop,Python,Pandas,For Loop,我有一个小数据框,两列宽。我的目标是根据QE列中的唯一值,将此数据帧拆分为数据帧列表 我似乎找不到代码中的错误 为清晰起见进行了编辑: import pandas as pd def Function1(): data = {'Name': ['Dave', 'Sue', 'John', 'Dave', 'Michael', 'Sue'], 'QE': ['12.31.2019', '12.31.2019', '12.31.2019', '03.31.2020'

我有一个小数据框,两列宽。我的目标是根据QE列中的唯一值,将此数据帧拆分为数据帧列表

我似乎找不到代码中的错误

为清晰起见进行了编辑:

import pandas as pd

def Function1():
    data = {'Name': ['Dave', 'Sue', 'John', 'Dave', 'Michael', 'Sue'],
            'QE': ['12.31.2019', '12.31.2019', '12.31.2019', '03.31.2020', '03.31.2020', '03.31.2020']
            }
    df = pd.DataFrame(data, columns=['Name', 'QE'])
    
    Quarters = list(df['QE'].unique())
               
    dfs = []
    for x in Quarters:
        df = df[df['QE'] == x]
        df = df['Name'].reset_index(drop=True) 
        dfs.append(df)
    
    return df

a = Function1()

使用列表理解和分组方式

dfs = [dataframe for _, dataframe in df.groupby('QE')]


print(dfs)

[      Name          QE
 3     Dave  03.31.2020
 4  Michael  03.31.2020
 5      Sue  03.31.2020,    Name          QE
 0  Dave  12.31.2019
 1   Sue  12.31.2019
 2  John  12.31.2019]

在标准for循环中,这将是

dfs = []
for _, dataframe in df.groupby('QE'):
    dfs.append(dataframe)

使用列表理解和分组方式

dfs = [dataframe for _, dataframe in df.groupby('QE')]


print(dfs)

[      Name          QE
 3     Dave  03.31.2020
 4  Michael  03.31.2020
 5      Sue  03.31.2020,    Name          QE
 0  Dave  12.31.2019
 1   Sue  12.31.2019
 2  John  12.31.2019]

在标准for循环中,这将是

dfs = []
for _, dataframe in df.groupby('QE'):
    dfs.append(dataframe)

你能添加你的数据帧吗?请参阅,您的文件中似乎没有列
QE
。您使用的是哪个python版本?用一个简单的csv文件在Python2.7上运行您的代码,它可以工作。您是否检查了数据框中是否存在该列?尝试运行
df.columns
并查看它是否存在。@Manakin我已经编辑了代码以创建一个可复制的示例。谢谢你的建议。另外:使用字典中的数据帧而不是列表会很方便,因为你可以分配键而不是通过列表中的位置调用数据帧。你可以添加你的数据帧吗?请参阅,您的文件中似乎没有列
QE
。您使用的是哪个python版本?用一个简单的csv文件在Python2.7上运行您的代码,它可以工作。您是否检查了数据框中是否存在该列?尝试运行
df.columns
并查看它是否存在。@Manakin我已经编辑了代码以创建一个可复制的示例。谢谢你的建议。另外:使用字典中的数据帧而不是列表会很方便,因为你可以分配键,而不是通过数据帧在列表中的位置调用它们。这很有效,谢谢你的回复。我明白,在解决方案中,有必要使用“\”,因为我的期望结果需要它。但是我对代码不熟悉。
\uuu
基本上是一个填充,它是数据帧的索引-在这个例子中,我们不使用它的组,所以我们忽略它@DylanMoore请参见编辑。您的第二个解决方案实际上更适合我,因为我在循环中还有其他一些数据帧清理工作要做。谢谢你的帮助和解释!这很有效,谢谢你的回复。我明白,在解决方案中,有必要使用“\”,因为我的期望结果需要它。但是我对代码不熟悉。
\uuu
基本上是一个填充,它是数据帧的索引-在这个例子中,我们不使用它的组,所以我们忽略它@DylanMoore请参见编辑。您的第二个解决方案实际上更适合我,因为我在循环中还有其他一些数据帧清理工作要做。谢谢你的帮助和解释!