【问题标题】:For loop over dataframe pythonFor循环数据框python
【发布时间】:2021-01-06 17:14:30
【问题描述】:

我有一个名为 df_civic 的数据框,其中包含列 - state ,rank, make/model, model year, thefts。我想为每个model year 计算theftsAVGSTD

数据框中的所有年份均采用:years_civic = list(pd.unique(df_civic['Model Year']))

我的循环如下所示:

for civic_year in years_civic:
    f = df_civic['Model Year'] == civic_year
    civic_avg = df_civic[f]['Thefts'].mean()
    civic_std = df_civic[f]['Thefts'].std()
    civic_std= np.round(car_std,2)
    civic_avg= np.round(car_avg,2)
    print(civic_avg, civic_std, np.sum(f))

但是输出不是我需要的,只有正确的输出是来自np.sum(f)的输出

现在输出如下所示:

9.0 20.51 1
9.0 20.51 1
9.0 20.51 1
9.0 20.51 1
9.0 20.51 13
9.0 20.51 15
9.0 20.51 3
9.0 20.51 2

【问题讨论】:

  • 请根据本文提供的提示包含示例数据并格式化您的问题:stackoverflow.com/a/20159305
  • @Aleksander,您可以使用三重 ``` 代码 ``` 来标记多行的代码块。花了一些时间来编辑您的 100 个代码块和
    s :) .. 此外,您可以简单地将新行移动到另一行而不使用
    。它允许在降价。检查我如何编辑您的问题,以便下次更好地格式化您的问题。干杯。
  • 嗨,对不起,我下次会使用正确的!

标签: python pandas dataframe loops for-loop


【解决方案1】:

Pandas 为聚合数据提供了许多强大的功能。在使用for 循环之前,通常最好先考虑这些函数。

例如,您可以使用:

import pandas as pd
import numpy as np

df_civic.groupby("Model Year").agg({"theft": ["mean", np.std]})

更多文档在这里:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html

关于你的代码,有些奇怪,car_stdcar_avg 没有定义。

【讨论】:

  • 为什么要快点?您还没有告诉 OP 他可能出了什么问题,虽然您的解决方案可能更好,但为什么要提供未经测试的解决方案?
  • @navneethc 你能指出我做错了什么吗,我也很想知道这一点。
  • @AleksanderKuś 你能发布示例数据吗?
  • 我检查了代码,循环本身是正确的 - 它正在工作,我没有正确定义 car_std 和 car_avg 并且它从其他循环中获取了价值。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
相关资源
最近更新 更多