我在Pandas中有以下数据标题:
我正在努力低于结果:
我正在尝试执行命令:
df = df.reorder_levels([0, 1, 3, 2], axis='columns')
然而,它只是对行重新排序,我发现这里存在风险以破坏数据的一致性。
你能建议大熊猫/ pythonic这样做吗?或者我应该检查哪些选项以正确导出到Excel(如图2所示)?
答案 0 :(得分:1)
我认为您只能使用一些黑客解决方案 - 在列中从df
创建帮助MultiIndex
,然后在没有标题的情况下写入excel
:
np.random.seed(100)
cols = pd.MultiIndex.from_product([list('ABC'), list('EF')])
df = pd.DataFrame(np.random.random((1,6)), columns=cols)
print (df)
A B C
E F E F E F
0 0.543405 0.278369 0.424518 0.844776 0.004719 0.121569
df1 = pd.DataFrame(df.columns.values.tolist()).T
df1.columns.name = None
df1.index = [''] * len(df1.index)
print (df1)
0 1 2 3 4 5
A A B B C C
E F E F E F
df.columns = np.arange(len(df.columns))
df = pd.concat([df1, df])
print (df)
0 1 2 3 4 5
A A B B C C
E F E F E F
0 0.543405 0.278369 0.424518 0.844776 0.00471886 0.121569
df.to_excel('myfile.xlsx', header=None)
另一种双转置解决方案:
df1 = df.T.rename_axis(['',' ']).reset_index().T
print (df1)
0 1 2 3 4 5
A A B B C C
E F E F E F
0 0.543405 0.278369 0.424518 0.844776 0.00471886 0.121569
df.to_excel('myfile.xlsx', header=None)
答案 1 :(得分:1)
我最近遇到了这个问题,发现了另一个肮脏但更容易破解的问题。
只要第一个标题行具有不同的值,df.to_excel就会将后续标题行保存为单独的值。因此,在设置标题时,请将第一行设为唯一字符,并在其余代码中忽略它。
没有唯一的第一个标题行:
df1 = pd.DataFrame(columns=[['APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1'],
['CODE', 'CODE', 'CODE', 'CODE', 'CODE'],
['GLMNET', 'HYBER', 'LightGBM', 'XGB_1', 'XGB_2']])
Image of df1 result with merged header values
使用唯一的第一个标题行:
df2 = pd.DataFrame(columns=[[1, 2, 3, 4, 5],
['APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1', 'APPROACH #1'],
['CODE', 'CODE', 'CODE', 'CODE', 'CODE'],
['GLMNET', 'HYBER', 'LightGBM', 'XGB_1', 'XGB_2']])
Image of df2 result with separate header values
希望这有帮助!