当执行 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
我想在这两种情况下都获得一个系列,或者至少使其保持一致,而不必检查是否只有一个组。有一些线程提到了这个问题,但我找不到任何修复方法。
最佳答案
解决方案是在 groupby 中添加 squeeze=True
。
关于python - groupby.apply() 的不一致行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52878592/