我有一个包含许多列的数据框。我正在尝试过滤其中一列(“区域”)并根据“区域”列中的这 4 个区域中的每一个创建一个单独的数据框。然后运行一大块代码,其中包含对这 4 个独立数据帧中的每一个的一堆计算,而不必分别重写大块代码 4 次。
我知道我可以使用 .isin 函数进行列过滤,并针对我的 4 个区域(美国、新兴市场、欧洲、亚洲)执行此操作:
US = df[df['Region'].isin('US')]
EM = df[df['Region'].isin('EM')]
Europe = df[df['Region'].isin('Europe')]
Asia = df[df['Region'].isin('Asia')]
然后在 4 个新数据帧上运行我的代码块。但是我会分别执行我的大块计算代码 4 次,这太困惑了。我怎样才能在循环中执行此操作,以便我只需要编写一次大块代码?如果除了 for 循环之外我还可以使用另一个函数来执行此操作,那也很棒。感谢任何帮助-尝试学习。
虚拟代码:
df = pd.DataFrame({'a':[1,2,3,4,5,6], 'b':['cats','dogs','birds','pianos','elephant','dinos'], 'Region' : ['EM', 'US', 'US', 'Europe', 'Asia', 'Asia']})
最佳答案
只需迭代一个 groupby
对象:
dfs = {}
for region, df_region in df.groupby('Region'):
# do something to df_region
# ...
# then store in dictionary
dfs[region] = df_region
然后通过dfs['US']
、dfs['Asia']
等访问单个数据帧
当然,您可以根据 region
调整您的操作,但这不是必需的。每个 df_region
代表一个由 df[df['Region'] == region]
过滤的数据帧。
关于python - Pandas Dataframe 过滤器和 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53887292/