2
J'ai un zéros contenant la série, les pandas géants et np.nan:valeurs du groupe contaning np.nan à des intervalles
import pandas as pd
import numpy as np
df1 = pd.Series([ 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, np.nan, np.nan, 1])
df1
Out[6]:
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 1.0
6 1.0
7 1.0
8 0.0
9 0.0
10 0.0
11 NaN
12 NaN
13 1.0
dtype: float64
Je voudrais créer un DF2 de dataframe qui contient le début et la fin d'intervalles avec la même valeur, ainsi que la valeur associée ... DF2 dans ce cas devrait être ...
df2
Out[5]:
Start End Value
0 0 4 0
1 5 7 1
2 8 10 0
3 11 12 NaN
4 13 13 1
Suite à une solution here:
s = df1.ne(df1.shift()).cumsum()
df2 = df1.groupby(s).apply(lambda x: pd.Series([x.index[0], x.index[-1], x.iat[0]],
index=['Start','End','Value']))
.unstack().reset_index(drop=True)
mais il ne fonctionne pas pour ce cas
df2
Out[11]:
Start End Value
0 0.0 4.0 0.0
1 5.0 7.0 1.0
2 8.0 10.0 0.0
3 11.0 11.0 NaN
4 12.0 12.0 NaN
5 13.0 13.0 1.0
Si vous voulez connaître la raison pour laquelle les valeurs NaN ne comparent jamais égal, il est expliqué dans cette question. Ce n'est pas spécifique à python ou à numpy. https://stackoverflow.com/questions/1565164/what-is-the-rationale-for-all-comparisons-returning-false-for-ieee754-nan-values –