【发布时间】: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 数学或其他东西,这也不是我想要的。
【问题讨论】:
-
能分享一下输入数据集吗
-
以及预期的输出:)
-
完成,如果您需要更多信息,请告诉我