gpt4 book ai didi

python - Pandas 将 groupby 堆栈到 DataFrame MultiIndex 而不聚合

转载 作者:行者123 更新时间:2023-11-28 21:33:42 34 4
gpt4 key购买 nike

关于将 pandas groupby 对象转换为 DataFrame 的几个问题似乎涉及聚合,例如count() here .

是否可以将 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: df[0][x]%2)

转换为这种形式:

DF.from_dict({0:{'b':2,'d':4},1:{'a':1,'c':3,'e':5}},orient='index').stack().to_frame()

enter image description here

(除此之外,为什么值要转换为 float ?)

最佳答案

使用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

迭代每个组并构建你的字典。字典可以使用 dictionary comprehension 构建。 .


可以使用不涉及可调用的稍快的解决方案来完成,

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

关于python - Pandas 将 groupby 堆栈到 DataFrame MultiIndex 而不聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315501/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com