我有一个具有以下数据样式的数据框
我想为3个因素(F1,F2,F3)的样式列中的每个公司计算每个月的z得分(标准化) 比如2014年8月31日,我想计算该月份风格中每个公司的风格(比如建筑材料)的z分数(F1,F2,F3)。再次为2014年8月31日,我想计算当时每个拥有“电子设备,仪器和组件”的公司的风格(例如电子设备,仪器和组件)的z分数。并且每个月都要重复这个过程。 回顾一下,首先从日期开始,然后计算每种风格的z分数,然后每个月重复一次。
我首先尝试定义z-score zscr = lambda x:(x-x.mean())/ x.std() 然后按日期分组,风格但没有得到预期的结果。
提前谢谢
Date Name Style ID \
0 8/31/2014 XYZ Construction Materials ABC
1 9/30/2014 XYZ Construction Materials ABC
2 10/31/2014 XYZ Construction Materials ABC
3 11/30/2014 XYZ Construction Materials ABC
4 8/31/2014 Acme Electronic Equipment, Instruments & Components KYZ
5 9/30/2014 Acme Electronic Equipment, Instruments & Components KYZ
6 10/31/2014 Acme Electronic Equipment, Instruments & Components KYZ
F1 F2 F3
0 0.032111 0.063330 0.027733
1 0.068824 0.158614 0.032489
2 0.076838 0.034735 0.020062
3 0.020903 0.154653 0.056860
4 0.032807 1.099790 0.233216
5 -0.014995 0.814866 0.498432
6 -0.002233 1.954578 0.727823
2014年8月31日3个名称的样式构造材料的详细示例
Date Name Style F1 F2 F3 Avg F1 Avg F2 Avg F3 Std F1 Std F2 Std F3 Zscore F1 Zscore F2 Zscore F3
8/31/2014 XYZ Construction Materials ABC 0.0321 0.0633 0.0277 0.0292 0.5066 0.3623 0.0219 0.5091 0.3078 0.131514468 -0.870730766 -1.087062133
8/31/2014 ABC Construction Materials XKSD 0.0495 0.3939 0.4258 0.0292 0.5066 0.3623 0.0219 0.5091 0.3078 0.927735574 -0.221422977 0.206304231
8/31/2014 HCAG Construction Materials TETR 0.0061 1.0626 0.6334 0.0292 0.5066 0.3623 0.0219 0.5091 0.3078 -1.059250041 1.092153743 0.880757903
答案 0 :(得分:2)
我相信您正在寻找groupby
+ transform
。
names = ['F1', 'F2', 'F3']
zscore = lambda x: (x - x.mean()) / x.std()
df[names] = df.groupby([df.Date, df.Style])[names].transform(zscore)
答案 1 :(得分:0)
我将 groupby 更改为 year 和 company 并过滤 zscores
Uri createUri(String url, [Map<String, String> queryParameters]) {
var isHttp = false;
if (url.startsWith('https://') || (isHttp = url.startsWith('http://'))) {
var authority = url.substring((isHttp ? 'http://' : 'https://').length);
String path;
final index = authority.indexOf('/');
if (-1 == index) {
path = '';
} else {
path = authority.substring(index);
authority = authority.substring(0, authority.length - path.length);
}
if (isHttp) {
return Uri.http(authority, path, queryParameters);
} else {
return Uri.https(authority, path, queryParameters);
}
} else if (url.startsWith('localhost')) {
return createUri('http://' + url, queryParameters);
}
throw Exception('Unsupported scheme');
}