- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从一个输入 DataFrame
开始,看起来像:
df = pd.DataFrame({"created_on":[datetime(2015, 1, 3),
datetime(2015 , 1, 5),
datetime(2015, 2, 24),
datetime(2015, 3, 6),
datetime(2015, 3, 17),
datetime(2015, 5, 31),
datetime(2015, 6, 3)],
"value":[3, 2, 1, 1, 3, 2, 2]
}
)
即
created_on value
0 2015-01-03 3
1 2015-01-05 2
2 2015-02-24 1
3 2015-03-06 1
4 2015-03-17 3
5 2015-05-31 2
6 2015-06-03 2
我想为每个月获取 created_on
在当前月份或从当前月份开始的过去 2 个月内的观察值的中值。
上述输入数据的预期输出是:
month median_value
2015-01-01 2.5
2015-02-01 2
2015-03-01 2
2015-04-01 1
2015-05-01 2
2015-06-01 2
即对于“2015-01-01”,仅使用观察值“2015-01-03”和“2015-01-05”,对于月份“2015-02-01”,我采用“2015-01- 03”、“2015-01-05”、“2015-02-24”等。
我想从日期列中提取月份,然后像这样使用 groupby
:
df['created_on_month'] = df['created_on'].apply(
lambda dt: datetime(dt.year, dt.month, 1)
)
df.groupby('created_on_month').median()
但我不知道如何在 groupby
中对 3 个月内进行聚合,以一行可以属于多个组的方式。此解决方案的另一个问题是空月份(上例中的“2015-04-01”)不会出现在结果中。
我也尝试过使用 pandas 提供的 rolling_median
可以完成这项工作,但它与 resample
一起使用,在计算观察次数时效果很好,但中位数中位数是不一样的。
最后,我还可以使用一个简单的循环,例如:
months = pd.date_range('2015-01-01', '2015-06-01', freq='MS')
output = pd.DataFrame(index=months, columns=("month", "median_value"))
for m in months:
tmp = df [ (df.created_on >= (m - pd.DateOffset(months=2)))
& (df.created_on <= m+pd.DateOffset(months=1))]
res = {"month":m, "median_value":tmp["value"].median()}
output.loc[m] = res
print output
产生:
month median_value
2015-01-01 2015-01-01 00:00:00 2.5
2015-02-01 2015-02-01 00:00:00 2
2015-03-01 2015-03-01 00:00:00 2
2015-04-01 2015-04-01 00:00:00 1
2015-05-01 2015-05-01 00:00:00 2
2015-06-01 2015-06-01 00:00:00 2
但如果存在更优雅的解决方案,我会很乐意学习它。
最佳答案
好的,这应该很接近了。我使用的是 90 天的窗口 b/c 我不确定我是否可以使用 3 个月的窗口。否则,它似乎工作得很好。
df2 = pd.rolling_apply( df.set_index('created_on')['value'], window=90,
func=np.nanmedian, freq='d', min_periods=1 )
df2[ (df2.index.day == 1)[1:] ] # [1:] is a kludge to get end of month
# rather than beginning, probably a
# better way to do that...
created_on
2015-01-31 2.5
2015-02-28 2.0
2015-03-31 2.0
2015-04-30 1.0
2015-05-31 2.0
请注意,因为我的方法与您的不同,它会在月末而不是月初标记出来,但这不会以任何方式影响结果,而且我认为月末实际上更准确。
我不确定打印出 2015 年 6 月结果的最佳方法,但它已正确存储在 6 月 3 日的 df2 中:
df2.tail(1)
created_on
2015-06-03 2
所以这只是如何最好地提取和显示信息的问题。我想用 6 月 30 日的缺失值填充原始数据框是一种方法。
关于python - 使用日期索引从 pandas DataFrame 计算 3 个月的滚动中位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624859/
基本上在 excel 中,我想要一个表格,就像下面右边给出的那个(我的数据规模比给出的例子大很多),它有每个主题的中位数,每个条件(例如 TADA、TADP、TPDA , TPDP)。理想情况下,我会
我有一个大小为5000 * 5000的矩阵,其90%的值为0。是否有现成的解决方案可用来计算排除“0”后该矩阵的均值,中位数? 一种粗制解决方案是将所有0更改为NA并使用 median(x, na.
这个问题已经有答案了: Mean per group in a data.frame [duplicate] (8 个回答) 已关闭 9 年前。 我有一个数据框,详细记录了客户花了多少钱,如下所示:
这是我的代码,用于打印所有职业的平均值和中位数。 occupation_lst = ['ALL OCCUPATIONS', 'MANAGEMENT', 'Chief executives', 'Gen
我的 csv 文件中有一个数据集,如下所示: teacher student student grade Jon marin
如何在 C 中不使用数组的情况下找到一组数字的平均值、中位数?问题不是找到平均值或中位数的方法,而是如果不允许使用数组,如何存储一组数字并对它们执行一些操作? 最佳答案 一个有趣的问题。 关键是找到一
我正在使用 SQL Server 2008 如果我有这样的表: Code Value ----------------------- 4 240 4 299 4 21
我正在尝试获取表中一组值的平均值、中位数、众数和范围。我能够得到平均值,但中位数、范围和众数我得到了错误的值。 下面是我为上述概念尝试过的代码。 Select CDS.[Commodity_S
我正在尝试获取表中一组值的平均值、中位数、众数和范围。我能够得到平均值,但中位数、范围和众数我得到了错误的值。 下面是我为上述概念尝试过的代码。 Select CDS.[Commodity_S
我需要从输入文件中查找平均值、中位数、众数和范围。 [input file has the numbers{60,75,53,49,92,71}] 我不知道如何打印范围内的计算结果或计算众数。 这很糟
这个问题已经有答案了: Division of integers in Java [duplicate] (7 个回答) 已关闭 7 年前。 public static double calcMed
当我输入 1,2,3 时我的中位数计算有问题我的中位数是 = 44 我不知道为什么 double wynik = 0; string x1 = textBox1.Text; string[] tab
我的中位数 3 实现在这里运行不正常。我必须为媒体随机选择 3 个数字,这是我的代码,请帮助我。 #include"stdafx.h" #include #include using namespa
我有一个文件,其中有如下几秒钟的数字: 0.01033 0.003797 0.02648 0.007583 0.007491 0.028038 0.012794 0.00524 0.019655 0.
是否有任何函数(作为数学库的一部分)可以计算 mean 、中位数、众数和范围来自一组数字。 最佳答案 是的,似乎确实有第三个库(Java Math 中没有)。出现的两个是: http://opsres
我目前正在尝试从具有两个条件的一系列数据中提取中位数。本质上相当于下面的 AVERAGEIFS(),我工作得很好。 AVERAGEIFS(): =AVERAGEIFS(Analysis!$F:$F,A
我有一个 pandas 数据框,看起来像这样: 给定行中的每个值要么是相同的数字,要么是 NaN。我想计算数据框中所有两列组合的平均值、中位数和获取计数,其中两列都不是 NaN。 例如,上述数据帧的结
我有以下数据: [4.1, 4.1, 4.1, 4.2, 4.3, 4.3, 4.4, 4.5, 4.6, 4.6, 4.8, 4.9, 5.1, 5.1, 5.2, 5.2, 5.3, 5.3, 5
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
一组整数作为输入。您必须返回该集合的子集,以便该子集的均值 - 中位数最大。 示例 1 输入 {1,2,3,4} 输出 {1,2,4} 例子2 输入 {1,2,2,3,3} 输出 {2,2,3} 最佳
我是一名优秀的程序员,十分优秀!