У меня есть фрейм данных, в котором есть несколько групп числовых рядов, где значения являются накопительными.Рассмотрим следующее:
df = pd.DataFrame({'Cat': ['A', 'A','A','A', 'B','B','B','B'], 'Indicator': [1,2,3,4,1,2,3,4], 'Cumulative1': [1,3,6,7,2,4,6,9], 'Cumulative2': [1,3,4,6,1,5,7,12]})
In [74]:df
Out[74]:
Cat Cumulative1 Cumulative2 Indicator
0 A 1 1 1
1 A 3 3 2
2 A 6 4 3
3 A 7 6 4
4 B 2 1 1
5 B 4 5 2
6 B 6 7 3
7 B 9 12 4
Мне нужно создать дискретный ряд для Cumulative1 и Cumulative2, с начальной точкой, являющейся самой ранней записью в 'Indicator'.
Мой подход заключается в использовании diff ()
In[82]: df['Discrete1'] = df.groupby('Cat')['Cumulative1'].diff()
Out[82]: df
Cat Cumulative1 Cumulative2 Indicator Discrete1
0 A 1 1 1 NaN
1 A 3 3 2 2.0
2 A 6 4 3 3.0
3 A 7 6 4 1.0
4 B 2 1 1 NaN
5 B 4 5 2 2.0
6 B 6 7 3 2.0
7 B 9 12 4 3.0
У меня есть 3 вопроса:
Как мне избежать NaN элегантным / Pythonic способом?Правильные значения должны быть найдены в исходном накопительном ряду.
Во-вторых, как мне элегантно применить это вычисление ко всем рядам, скажем -
cols = ['Cumulative1', 'Cumulative2']
В-третьих, у меня многоданные, которые требуют этого вычисления - это самый эффективный способ?