【问题标题】:Trying to group repeated x values, and find the mean of the y values associated with these repeats尝试对重复的 x 值进行分组,并找到与这些重复相关的 y 值的平均值
【发布时间】:2021-06-20 19:47:23
【问题描述】:

我正在使用熊猫。我编写了这个脚本来做我想做的事,但绝对没有优化。基本上,我在 namearray 中找到所有 x 重复,取相关 y 值的平均值,用平均值替换第一行的 y 值,并删除除第一行之外的所有重复 x 值的行。实际上,在图表上,我删除了看起来堆叠在一起的点,而只绘制了产生的平均值。

cats = np.unique(name_array[selected_x].values)
for j in cats:
    rows_cat = name_array[name_array[selected_x] == j]
    first_row = rows_cat.iloc[[0],:]

    avg = rows_cat[selected_y].mean()
    first_row[selected_y] = avg

    name_array = name_array[name_array[selected_x] != j]
    name_array = name_array.append(first_row,ignore_index=True)

这是我要替换它的脚本。但是,它不起作用,我不知道为什么。我正在尝试像以前一样按 x 值分组,并将新分组的 x 的 y 值替换为平均值:

name_array[selected_y] = name_array.groupby(selected_x)[selected_y].mean()

这种方法看起来更简单、更易读、更高效。任何想法为什么它不执行相同的功能?

编辑:

输入示例:

date state new_cases new deaths days_since_date etc.
2021-03-24 PA 500 200 4 etc.
2021-03-25 PA 300 300 4 etc.
2021-03-26 PA 400 100 2 etc.
2021-03-27 PA 200 200 1 etc.

说 selected_y 是 new_cases,selected_x 是 days_since_date。 我想要的是,这个:

date state new_cases new deaths days_since_date etc.
2021-03-24 PA 400 200 4 etc.
2021-03-26 PA 400 100 2 etc.
2021-03-27 PA 200 200 1 etc.

本质上,在 selected_x 列中重复的分组,取 selected_y 列中关联值的平均值,但不要取其他列的平均值。

原因是,日期不是日期时间类型,所以我看不出将它的平均值视为实际上意味着什么的东西,而且从总体上看,我不在乎日期是否是平均的。同样适用于状态,你不能得到字符串的平均值,除非你做某种类型的 ASCII 数学或其他东西,这也不是我想要的。

【问题讨论】:

  • 能分享一下输入数据集吗
  • 以及预期的输出:)
  • 完成,如果您需要更多信息,请告诉我

标签: python pandas


【解决方案1】:
data.groupby(['x']).mean()['y']

通过这种方式,您可以根据x 对数据进行分组,通过调用.mean 并切分您需要的列y,找到与该组关联的所有列的平均值。

【讨论】:

  • 重新发布了我的数据,有些列是字符串,所以我相信必须调整这个答案来解决这个问题。
  • 是的,它的功能很奇怪。出于某种原因,它删除了我图表上除两个点之外的所有点。所以我会稍微弄乱一下,最初的想法是字符串列在取平均值时表现得很奇怪。
猜你喜欢
  • 2021-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2012-01-09
  • 2020-01-17
相关资源
最近更新 更多