【问题标题】:How to efficiently iterate over pandas dataframe based on a columns value如何根据列值有效地迭代熊猫数据框
【发布时间】:2020-10-02 06:29:45
【问题描述】:

我有一个df,它有 3 列,其中最后一列包含组的 code_name。 这是我df的头像

    date         value      name
0   2015-02-26  0.033308    4332_1_2
1   2015-03-30  0.089551    4332_1_2
2   2015-04-15  0.518057    4332_1_2
3   2015-05-01  0.184956    4332_1_2
4   2015-05-17  0.291904    4332_1_2

我想根据name 列迭代这个df,这意味着在每次迭代中,只会包含同名的行。我使用的方法是“简单”循环:

for i in df['name'].unique():
    df_temp = df[df['name']==i].copy()
    do something with df_temp...

如何改进迭代?

【问题讨论】:

  • 你的预期输出是什么?
  • 找到一种更好的方法来迭代 df。它不是行或列迭代,而是基于列名称的值对行组进行迭代。组的长度不相等

标签: python-3.x pandas loops iteration


【解决方案1】:

这看起来像一个

df.groupby('name').apply(...)

你不会用原始循环击败它的性能。

【讨论】:

  • group by 将分组其他值,例如“日期”和“值”,我需要这些值。对于每组行,我需要它位于数据帧结构中,因为我需要为每个“迷你”数据帧做各种事情
  • 这就是groupby 所做的,不要试图自己重新发明。不需要为 pandas 数据框创建自定义循环,尤其是您不想做的微不足道的事情。我每天都使用pandas,可能有 1% 的时间我必须循环我的数据帧。
  • 那么,假设对于每个“迷你”数据帧,我想应用 100 行代码,我应该将这 100 行写成一个函数,然后将其传递给应用?
  • 是的,完全正确。以下是有关如何编写函数的更多详细信息:pandas.pydata.org/pandas-docs/stable/user_guide/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-17
  • 2015-12-09
  • 2014-06-02
  • 1970-01-01
  • 2015-06-24
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多