首页 > 解决方案 > Pandas groupby 索引不正确

问题描述

我可能会误解该pd.GroupBy函数的作用,但我相信这应该断言True.它为什么断言False

a = pd.DataFrame([range(3)]*3,index=map(str, range(3))).T
a.iloc[:,0] = [10, 11, 11]

a.groupby('0').apply(lambda x: print(x.index))

indexes = a.groupby('0').apply(lambda x: x.index)
print(indexes)

index_lengths = a.groupby('0').apply(lambda x: len(x.index))
print(index_lengths)

indexes_lengths = a.groupby('0').apply(lambda x: x.index).apply(len)
print(indexes_lengths)

assert indexes_lengths.equals(index_lengths), "Apply indexes are returning the wrong index"

标签: pythonpandasgroup-byapply

解决方案


也许是错误,但如果将索引转换为list所有工作都很好:

indexes = a.groupby('0').apply(lambda x: list(x.index))
print(indexes)
0
10       [0]
11    [1, 2]
dtype: object

indexes_lengths = a.groupby('0').apply(lambda x: list(x.index)).apply(len)
print(indexes_lengths)
0
10    1
11    2
dtype: int64

index_lengths = a.groupby('0').apply(lambda x: len(x.index))
print(index_lengths)
0
10    1
11    2
dtype: int64

推荐阅读