我可能会误解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"
答案 0 :(得分:1)
可能是错误,但是如果将索引转换为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
答案 1 :(得分:0)
我猜这是apply
中的错误。如果您仍希望将输出作为index
对象的列表,只需通过添加.copy
a.groupby('0').apply(lambda x: x.index.copy())
Out[706]:
0
10 Int64Index([0], dtype='int64')
11 Int64Index([1, 2], dtype='int64')
dtype: object
len
中的 index
似乎没有遇到此错误
a.groupby('0').apply(lambda x: len(x.index))
Out[707]:
0
10 1
11 2
dtype: int64
仅当直接应用于index
时,才会出现此错误。因此,添加.copy
会根据您的意愿返回
a.groupby('0').apply(lambda x: x.index.copy()).apply(len)
Out[708]:
0
10 1
11 2
dtype: int64