我有一个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)
答案 0 :(得分:3)
如果所有值都是字符串,请将Index.map
与join
一起使用:
df.columns = df.columns.map('_'.join)
或者format
或f-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