Мне нужно объединить сгруппированные данные DataFrameGroupBy.cumsum Это демонстрирует различное поведение, когда: 1. Данные являются плотными 2. Данные являются разреженными 3. Данные являются разреженными и используют эти значения в функции применения Пример ниже:
import pandas as pd
df=pd.DataFrame([['Jack','Blue','R1'],
['Jack','Grey','R2'],
['Jill','Grey','R1'],
['Jill','Red','R2'],
['Sue','Blue','R2'],
['Max','Grey','R1'],
['Jill','Blue','R1']],
columns=list("ABC"))
df=pd.get_dummies(df,columns=['B','C'])
df.groupby('A')[['B_Blue','B_Grey','B_Red','C_R1','C_R2']].cumsum()
- Вывод: (правильно)
B_Blue B_Grey B_Red C_R1 C_R2
0 1 0 0 1 0
1 1 1 0 1 1
2 0 1 0 1 0
3 0 1 1 1 1
4 1 0 0 0 1
5 0 1 0 1 0
6 1 1 1 2 1
Теперь, если я использую sparse = True в get_dummies:
df=pd.get_dummies(df,columns=['B','C'],sparse=True)
df.groupby('A')[['B_Blue','B_Grey','B_Red','C_R1','C_R2']].cumsum()
Выход - DataError:
DataError Traceback (most recent call last)
<ipython-input-36-8322e59e5a95> in <module>
----> 1 df.groupby('A')[['B_Blue','B_Grey','B_Red','C_R1','C_R2']].cumsum()
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in cumsum(self, axis, *args, **kwargs)
2157 return self.apply(lambda x: x.cumsum(axis=axis, **kwargs))
2158
-> 2159 return self._cython_transform("cumsum", **kwargs)
2160
2161 @Substitution(name="groupby")
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\groupby\groupby.py in _cython_transform(self, how, numeric_only, **kwargs)
866
867 if len(output) == 0:
--> 868 raise DataError("No numeric types to aggregate")
869
870 return self._wrap_transformed_output(output, names)
DataError: No numeric types to aggregate
При использовании
применить функцию:
df=pd.get_dummies(df,columns=['B','C'],sparse=True)
df.groupby('A').apply(lambda x: x[['B_Blue','B_Grey','B_Red','C_R1','C_R2']].cumsum())
Я снова получаю правильный вывод:
B_Blue B_Grey B_Red C_R1 C_R2
0 1 0 0 1 0
1 1 1 0 1 1
2 0 1 0 1 0
3 0 1 1 1 1
4 1 0 0 0 1
5 0 1 0 1 0
6 1 1 1 2 1
Может кто-нибудь объяснить, почему произошел сбой Case 2?