重命名groupname标题pandas

时间:2017-03-17 11:48:05

标签: python bash pandas

我使用下面的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

但是ErrorCode 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列值更改(但我认为这也不是一个非常好的方法)

Update1:​​同样我有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的字典映射ErrorCode 这是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

1 个答案:

答案 0 :(得分:1)

您可以使用renamekeys dict的所有值替换为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