【问题标题】:Pandas Dataframe filter and For LoopPandas Dataframe 过滤器和 For 循环
【发布时间】:2019-05-22 01:46:37
【问题描述】:

我有一个包含许多列的数据框。我正在尝试过滤其中一个列(“区域”)并根据“区域”列中的这 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']})

【问题讨论】:

  • 你能提供一些关于这个“大代码块”的线索吗?
  • 为什么需要拆分DataFrame?如果每个区域的计算都相似,那么您可以使用np.select 或字典将区域映射到每个计算的区域特定值。但如果不知道自己需要做什么,就很难提供更多指导。

标签: python pandas for-loop pandas-groupby


【解决方案1】:

只需迭代一个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] 过滤的数据帧。

【讨论】:

  • df.groupby('Region').apply(some_function) ?
  • @d_kennetz,取决于操作。但是,是的,有可能。
  • @d_kennetz 我认为刚才提到的groupby 已经足够好了,因为我们不知道他要应用的功能
  • 我要运行的大块代码基本上只是几个数据透视表,我将它们堆叠在一起以创建一个巨大的数据框
  • @spacedinosaur10 然后你可以用你原来的 df 运行它pivot table,因为pivot是groupby check stackoverflow.com/questions/47152691/how-to-pivot-a-dataframe的另一种布局@
猜你喜欢
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2018-03-16
  • 2019-07-28
相关资源
最近更新 更多