给出以下示例:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B' : ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'C' : np.random.randn(8),
'D' : np.random.randn(8)})
def var1(x): return max(x)-min(x)
def var2(x): return (max(x)-min(x))/max(x)
def var3(x): return (max(x)-min(x))/ len(x)
df = df.groupby(['A','B']).agg({'C': var1, 'D': [var2, var3]})
df.columns = df.columns.droplevel()
但是df.columns = df.columns.droplevel()
不是我想要的解决方案,因为我只能放弃一个级别。我想放弃这两个第一级。
我已使用df.columns = df.columns.droplevel()
0,1,2..
我想要一个没有红细胞的df:
换句话说,我无法达到这个输出(一个简单的标题):
A B var1 var2 var3
bar one 0.000000 -0.000000 0.000000
three 0.000000 -0.000000 0.000000
two 0.000000 -0.000000 0.000000
foo one 1.381629 -1.683335 0.582389
three 0.000000 0.000000 0.000000
two 0.636372 -0.031118 0.020791
答案 0 :(得分:3)
使用:
df.columns = df.columns.droplevel()
df = df.rename_axis([None] * 2)
#or
#df.index.names = [None] * 2
print (df)
var2 var3 var1
bar one -0.000000 0.000000 0.000000
three -0.000000 0.000000 0.000000
two -0.000000 0.000000 0.000000
foo one -8.719019 0.461249 1.596351
three 0.000000 0.000000 0.000000
two 2.415974 0.558326 2.888277
但是可以添加列名,但这里只有一级列,所以只能标量:
df.columns.name = 'AB'
print (df)
AB var2 var3 var1
bar one -0.000000 0.000000 0.000000
three -0.000000 0.000000 0.000000
two 0.000000 0.000000 0.000000
foo one 0.469283 0.431255 0.164785
three -0.000000 0.000000 0.000000
two 0.967594 0.715657 0.827949