我使用以下python代码在终端上打印报告
print(kf.groupby(level='ErrorCode').apply(lambda x: x/x.sum()))
要得到
ErrorCode ResponseType
0 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
1 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
dtype: float64
但是错误代码 0,1 必须映射到不同的数字。该映射可以以任何格式写入文件中。目前我可以将映射文件编写为
0 10.0.0.0
1 10.0.0.1
2 10.2.0.1
上述格式可以更改。有没有办法用映射值替换分组值输出。最终输出会像
ErrorCode ResponseType
0 10.0.0.0 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
1 10.0.0.1 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
dtype: float64
如果这可以在 bash 中完成,甚至可以,但对齐应该是可读的。
如果这非常棘手,那么我会简单地根据映射文件更改 ErrorCode 列值(但我认为这也不是一个很好的方法(
更新1:同样,我也有data.groupby([data['ErrorCode'], pd.Grouper(freq='1500T')])['latency'].describe().unstack(0)
我的输出是
ErrorCode 0 1
Time_req
2017-03-08 count 111.000000 111.000000
mean 251509.738739 357710.729730
std 250469.755466 795885.356352
min 104877.000000 111343.000000
25% 132616.000000 131953.000000
50% 160899.000000 163100.000000
75% 261440.000000 279448.000000
max 2071299.000000 8039122.000000
但是我需要使用名为myd的字典映射错误代码这myd={0: '0 172.19.13.51', 1: '1 172.19.13.51'}
使得输出如下所示
ErrorCode 0 172.19.13.51 1 172.19.13.51
Time_req
2017-03-08 count 111.000000 111.000000
mean 251509.738739 357710.729730
std 250469.755466 795885.356352
min 104877.000000 111343.000000
25% 132616.000000 131953.000000
50% 160899.000000 163100.000000
75% 261440.000000 279448.000000
max 2071299.000000 8039122.000000
您可以使用rename
替换从dict
keys
到values
的所有值:
d = {0: '10.0.0.0', 1: '10.0.0.1',2: '10.2.0.1'}
df = df.rename(index=d)
print (df)
ErrorCode ResponseType
10.0.0.0 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
10.0.0.1 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
Name: val, dtype: float64
如果需要键和值一起:
d = {0: '10.0.0.0', 1: '10.0.0.1',2: '10.2.0.1'}
d = {k:str(k) + ' ' + v for k, v in d.items()}
df = df.rename(index=d)
print (df)
ErrorCode ResponseType
0 10.0.0.0 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
1 10.0.0.1 CANCEL_ORDER_CONFIRM 0.7207
TRADE_CONFIRM 0.2792
Name: val, dtype: float64