假设我有以下数据框df:
这个方法很有效,但是强烈依赖于除数为n的假设。不幸的是,我想要放弃这种假设,并且我也注意到并非所有符号都出现了n次:例如注意到symbol_a "BBBB"仅出现了四次(天)。这当然使上述尝试完全不可靠,因为它会混合不同符号的比例值。
总之,我需要一些东西,让我每隔n个元素就获得“比率”列的平均值;如果符号数不能被n整除,则每隔n个元素获得平均值,最后获得剩余部分的平均值(如果符号数例如,结果可能如下所示(假设n=3):
有没有类似这样的方法?非常感谢您的帮助,谢谢。
编辑:感谢迄今为止的答案。最理想的是一个简单的方法,可以将新的n-days-ratio列放在原始列旁边。当然,这个新列的长度更短,但如果元素重复,我也不介意。基本上,我需要一种根据这个平均值选择“好行”的方法。到目前为止,我正在创建一个字典作为中间步骤,但我相信有更好的方法。如果我能获得下面这样的东西就太好了:
date symbol_a symbol_b ratio
0 2017/01/01 AAAA AA 10
1 2017/01/02 AAAA AA 20
2 2017/01/03 AAAA AA 30
3 2017/01/04 AAAA AA 10
4 2017/01/05 AAAA AA 10
5 2017/01/06 AAAA AA 10
6 2017/01/01 BBBB BB 10
7 2017/01/02 BBBB BB 20
8 2017/01/03 BBBB BB 30
9 2017/01/04 BBBB BB 10
10 2017/01/01 CCCC CC 10
11 2017/01/02 CCCC CC 20
12 2017/01/03 CCCC CC 30
13 2017/01/04 CCCC CC 10
14 2017/01/05 CCCC CC 10
15 2017/01/06 CCCC CC 5
我对ratio列的平均值很感兴趣(这来自于之前的数据框,其中还有两列value_a和value_b,ratio=value_a/value_b,更多或者更少)。我想要做的是:
根据symbol_a(或者_b,其实是一样的)每n个元素取平均值。比如说n=3。
通常情况下,我会做如下操作:
df.groupby(['symbol_a','symbol_b']).mean()
然而,我希望每三天获得子平均值(实际时间跨度显然要长得多,我需要每五天)。
最初我以为我总是会有相同数量的符号,可以被n整除,所以我尝试了这样的方法:
df.groupby([df.index/n, 'symbol_a', 'symbol_b']).mean().reset_index()
这个方法很有效,但是强烈依赖于除数为n的假设。不幸的是,我想要放弃这种假设,并且我也注意到并非所有符号都出现了n次:例如注意到symbol_a "BBBB"仅出现了四次(天)。这当然使上述尝试完全不可靠,因为它会混合不同符号的比例值。
总之,我需要一些东西,让我每隔n个元素就获得“比率”列的平均值;如果符号数不能被n整除,则每隔n个元素获得平均值,最后获得剩余部分的平均值(如果符号数例如,结果可能如下所示(假设n=3):
symbol_a symbol_b 3_mean_ratio
0 AAAA AA 20
1 AAAA AA 10
2 BBBB BB 20
4 BBBB BB 10
5 CCCC CC 20
6 CCCC CC 8.33
有没有类似这样的方法?非常感谢您的帮助,谢谢。
编辑:感谢迄今为止的答案。最理想的是一个简单的方法,可以将新的n-days-ratio列放在原始列旁边。当然,这个新列的长度更短,但如果元素重复,我也不介意。基本上,我需要一种根据这个平均值选择“好行”的方法。到目前为止,我正在创建一个字典作为中间步骤,但我相信有更好的方法。如果我能获得下面这样的东西就太好了:
date symbol_a symbol_b ratio n-days-ratio
0 2017/01/01 AAAA AA 10 20
1 2017/01/02 AAAA AA 20 20
2 2017/01/03 AAAA AA 30 20
3 2017/01/04 AAAA AA 10 10
4 2017/01/05 AAAA AA 10 10
5 2017/01/06 AAAA AA 10 10
6 2017/01/01 BBBB BB 10 20
7 2017/01/02 BBBB BB 20 20
8 2017/01/03 BBBB BB 30 20
9 2017/01/04 BBBB BB 10 10
10 2017/01/01 CCCC CC 10 20
11 2017/01/02 CCCC CC 20 20
12 2017/01/03 CCCC CC 30 20
13 2017/01/04 CCCC CC 10 8.3
14 2017/01/05 CCCC CC 10 8.3
15 2017/01/06 CCCC CC 5 8.3
transform
来计算该组的平均值。 - Scott Boston