Непоследовательное поведение groupby.apply () - PullRequest
0 голосов
/ 18 октября 2018

При выполнении 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 голосов
/ 18 октября 2018

Решением было добавить squeeze=True в группу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...