可以将groupby对象转换为DataFrame 而不进行聚合,其中组名称变为MultiIndex的0级?这个过程可以迭代吗?
from pandas import DataFrame as DF
df = DF.from_dict({'a':1, 'b':2, 'c':3, 'd':4, 'e':5}, orient='index')
想要分组的输出:
df.groupby(lambda x: df0%2)
转换为这种形式:
DF.from_dict({0:{'b':2,'d':4},1:{'a':1,'c':3,'e':5}},orient='index').stack().to_frame()
(除了这一点,为什么值转换为浮点数?)
使用pd.concat,它接受字典:
pd.concat({k: v for k, v in df.groupby(lambda x: df.loc[x, 0] % 2)})
0
0 b 2
d 4
1 a 1
c 3
e 5
迭代每个组并构建您的字典。可以使用字典理解来构造字典。
一个稍微快一点的解决方案,不涉及可调用,可以使用,
pd.concat({k: v for k, v in df.groupby(df.iloc[:,0] % 2)})
0
0 b 2
d 4
1 a 1
c 3
e 5
如果需要,可以尝试一下这个功能,
def add_level(df, grouper):
return pd.concat({k: v for k, v in df.groupby(by=grouper)})
r = add_level(df, df.iloc[:,0] % 3)
add_level(r, r.iloc[:, 0] % 2)
0
0 1 d 4
2 b 2
1 0 c 3
1 a 1
2 e 5
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。