groupby.apply()的行为不一致

时间:2018-10-18 16:28:04

标签: python pandas

在执行df.groupby(...).apply(...)时,在组数> 1或= 1之间,操作的返回格式似乎不一致。当只有一个时,它返回一个数据帧而不是一个序列组。

df = pd.DataFrame({'A': ['a', 'a', 'a', 'a'], 'B': range(4), 'C': [1, 2, 3, 4]})        

    A   B   C
0   a   0   1
1   a   1   2
2   a   2   3
3   a   3   4

df.groupby('A').apply(lambda x: x['B']*x['C'].shift())

A     0   1   2   3         
a   NaN 1.0 4.0 9.0

具有多个组:

df = pd.DataFrame({'A': ['a', 'a', 'a', 'a','b'], 'B': range(5), 'C': [1, 2, 3, 4, 5]})

    A   B   C
0   a   0   1
1   a   1   2
2   a   2   3
3   a   3   4
4   b   4   5

df.groupby('A').apply(lambda x: x['B']*x['C'].shift())

A   
a  0    NaN
   1    1.0
   2    4.0
   3    9.0
b  4    NaN

我想在两种情况下都获得一个系列,或者至少使它保持一致,而不必检查是否只有一个组。有一些线程提到此问题,但我找不到任何解决办法。

1 个答案:

答案 0 :(得分:1)

解决方案是在分组依据中添加squeeze=True