重命名多索引数据框熊猫

时间:2019-11-29 06:06:51

标签: python pandas

我有一个multiIndex熊猫数据框。

from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 
import pandas as pd


mra = pd.read_excel(r"C:\Users\gpmammadova\MRA_REPORT.xlsx")

cru = pd.read_excel(r"C:\Users\gpmammadova\CRU SME pipeline.xlsx")

cust_mra = mra['CUSTOMERNAME']

cust_cru = cru['Name of Client']

s_mra = cust_mra.tolist()

s_cru = cust_cru.tolist()

matched_cru = []

for i in s_mra:
    for j in s_cru:
        if (fuzz.ratio(i, j) >= 85):
            matched_cru.append(j)
        else:
            matched_cru.append('NOT FOUND')

执行 Issue high med low name age empId Jack 44 Ab1 0 1 0 Bob 34 Ab2 0 0 1 Mike 52 Ab6 1 1 0 时,得到以下结果:-

df.columns

我希望通过重命名Multi_index问题列来展平此数据框。

预期输出df:

MultiIndex(levels=[['Issue'], ['high', 'med', 'low']],
       labels=[[0, 0, 0], [0, 1, 2]])

我尝试过:

name   age    empId  Issue_high  Issue_med  Issue_low
Jack    44     Ab1      0           1         0
Bob     34     Ab2      0           0         1
Mike    52     Ab6      1           1         0

出现错误。 df2 = df.rename(columns={'high':'Issue_high','low':'Issue_low','med':'Issue_med'}, level = 1)

有什么方法可以获取输出结构吗?

编辑:通过使用rename() got an unexpected keyword argument "level",我得到了

df.columns = df.columns.map('_'.join)

1 个答案:

答案 0 :(得分:3)

如果所有值都是字符串,请将Index.mapjoin一起使用:

df.columns = df.columns.map('_'.join)

或者formatf-string-也可以在级别中使用数字值:

df.columns = df.columns.map('{0[0]}_{0[1]}'.format)
df.columns = df.columns.map(lambda x: f'{x[0]}_{x[1]}')

最后一个DataFrame.reset_index用于将MultiIndex in Index转换为列:

df = df.reset_index()
print (df)
   name  age empId  Issue_high  Issue_med  Issue_low
0  Jack   44   Ab1           0          1          0
1   Bob   34   Ab2           0          0          1
2  Mike   52   Ab6           1          1          0