При выполнении 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
Я хотел бы получить Серию в обоих случаях или, по крайней мере, сделать ее последовательной, не проверяя, есть ли только одна группа или нет,В некоторых темах упоминается эта проблема, но я не смог найти ни одного исправления.