[Pandas在对一个组进行groupby-apply时有不一致的行为:
pd.DataFrame({'c1': [0, 0, 0], 'c2': [1, 2, 3]}).groupby('c1').apply(lambda df: df['c2']).shape
等于(1, 3)
while
pd.DataFrame({'c1': [0, 0, 1], 'c2': [1, 2, 3]}).groupby('c1').apply(lambda df: df['c2']).shape
等于(3, )
。
当groupby变量中只有一个唯一值时,产生的Serie将根据我的期望进行转置。
我需要一个一致的行为:无论组数如何,行数都必须保持为3。
当按仅具有一个值的列分组时,可以在squeeze=True
中指定.groupby(...)
,如下所示:
(
pd.DataFrame({'c1': [0, 0, 0],
'c2': [1, 2, 3]})
.groupby('c1', squeeze=True)
.apply(lambda df: df['c2']).shape
)
请参见文档here。