【发布时间】:2021-01-31 08:41:13
【问题描述】:
我有以下dfe :-
id categ level cols value comment
1 A PG Apple 428 comment1
1 A CD Apple 175 comment1
1 C PG Apple 226 comment1
1 C AB Apple 884 comment1
1 C CD Apple 288 comment1
1 B PG Apple 712 comment1
1 B AB Apple 849 comment1
2 B CD Apple 376 comment1
2 C None Orange 591 comment1
2 B CD Orange 135 comment1
2 D None Orange 423 comment1
2 A AB Orange 1e13 comment1
2 D PG Orange 1e15 comment2
df2 = pd.DataFrame({'s2': {0: 1, 1: 2, 2: 3}, `level': {0: 'PG', 1: 'AB', 2: 'CD'}})
df1 = pd.DataFrame({'sl': {0: 1, 1: 2, 2: 3, 3: 4}, 'set': {0: 'A', 1: 'C', 2: 'B', 3: 'D'}})
dfe = (dfe[['categ','level','cols','id','comment','value']]
.merge(df1.rename({'set' : 'categ'}, axis=1),how='left',on='categ')
.merge(df2, how='left', on='level'))
na = dfe['level'].isna()
dfs = {'no_null': dfe[~na], 'null': dfe[na]}
with pd.ExcelWriter('XYZ.xlsx') as writer:
for p,r in dfs.items():
if p== 'no_null':
c= ['cols','s2','level']
else:
c = 'cols'
df = r.pivot_table(index=['id','sl','comment','categ'], columns=c, values=['value'])
df.columns = df.columns.droplevel([0,2])
df = df.reset_index().drop(('sl',''), axis=1).set_index('categ')
for (id,comment), sdf in df.groupby(['id','comment']):
df = sdf.reset_index(level=[1], drop=True).dropna(how='all', axis=1)
df.to_excel(writer,sheet_name=name)
我想以某种方式订购,我试过了:-
df = r.pivot_table(index=['id','sl','comment','categ'], columns=c, values='value')
df.columns = df.columns.droplevel([1])
df = df.reset_index().drop(('sl',''), axis=1).set_index('categ')
这给了我Too many levels: Index has only 2 levels, not 3 错误,我不知道我在这里错过了什么/错了。
我对标题排列的预期输出是:-
想知道标题是否可以写成大写字母的 excel,如预期输出所示。
编辑 1 我尝试了答案,我得到了这个观点:-
我希望能够只显示一次 ID 和 COMMENT(因为它已经在代码逻辑中按 ID 分组),然后删除 sl 列和第一列 0,1,2 并删除0上方的空白行
【问题讨论】:
-
问题出在这里:
df.columns = df.columns.droplevel([0,2])你的栏目没有三层:[0,1,2] -
我几乎尝试了所有方法,但我无法解决问题..mtried 将列名 sa 赋予
droplevel -
列是什么样的?将
df.columns = df.columns.droplevel([0,2])替换为print(df.columns)并将打印功能的结果添加到您的问题中。 -
我无法运行它,因为它给出了错误,我已经展示了它的样子,而在我的问题中没有删除
sl.. -
@scott Boston 我的目标是让标题按照我在预期输出中提供的方式对齐,我无法得到它,尝试了各种扁平化方式..
标签: pandas dataframe pivot-table