我正在尝试以下示例,我需要对列进行分组:
import pandas as pd
import numpy as np
y = pd.DataFrame(np.random.randint(0,10, (20,30)).astype(float),
columns = pd.MultiIndex.from_tuples(
list(zip(np.arange(30),
np.random.randint(0,10, (30,))))
))
y.T.groupby(level = 1).agg(lambda x: np.std(x)/np.mean(x))
它有效。但是后面会返回错误:
y.groupby(level = 1, axis = 1).agg(lambda x: np.std(x)/np.mean(x))
我错过了什么吗?
更新:以下单独拍摄时起作用:
y.groupby(level = 1, axis = 1).agg(np.std)/\
y.groupby(level = 1, axis = 1).agg(np.mean)
答案 0 :(得分:0)
groupby
函数按列方式应用于数据框,但是,当数据框转置时,行会成为列,反之亦然。
如果您的行和列都不是多索引,那么这不会成为一个问题。但是,由于您通过level=1
属性将行索引视为多索引,因此您会收到该错误。
此外,如果您尝试按行分组,则应该axis=0
y.groupby(y.index, axis = 0).agg(lambda x: np.std(x)/np.mean(x))