Python 使用循环函数将数据帧过滤到数据帧列表中
我有一个小数据框,两列宽。我的目标是根据QE列中的唯一值,将此数据帧拆分为数据帧列表 我似乎找不到代码中的错误 为清晰起见进行了编辑: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'
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请参见编辑。您的第二个解决方案实际上更适合我,因为我在循环中还有其他一些数据帧清理工作要做。谢谢你的帮助和解释!