Náplň pandy sloupec s rozsah čísel na základě dvou podmínek

0

Otázka

Snažím se vyplnit ve sloupci s čísly -5000 do 5004, šlápnutí do 4, mezi stavu v jednom sloupci a stav v jiném. Hrabě začíná, když start==1. Hrabě nebude vždycky 5004, takže se to musí zastavit, když end==1

Zde je příklad vstupu:

start  end
1      0
0      0
0      0
0      0
0      0
0      1
0      0
0      0
1      0
0      0

Snažil jsem se np.arange:

df['time'] = df['start'].apply(lambda x: np.arange(-5000,5004,4) if x==1 else 0)

To samozřejmě nebude fungovat - já jsem skončil s řadou v jedné buňce. Také jsem si pohrával s cycle z itertools, ale to nefunguje, protože vzdálenosti mezi začátek a konec nejsou vždy stejné. Také jsem pocit, že by mohl být způsob, jak to udělat s ffill:

rise = df[df.start.where(df.start==1).ffill(limit=1250).notnull()]

Nejste si jisti, jak upravit, aby to zastavit na správné místo.

Byla bych ráda, lambda funkce, která dosahuje tento, ale nejsem si jistý, kam jít odsud.

Tady je můj očekávaný výstup:

start  end  time
1      0    -5000
0      0    -4996
0      0    -4992
0      0    -4988
0      0    -4984
0      1    -4980
0      0     nan
0      0     nan
1      0    -5000
0      0    -4996
numpy pandas python
2021-11-23 19:45:38
1

Nejlepší odpověď

2
grouping = df['start'].add(df['end'].shift(1).fillna(0)).cumsum()
df['time'] = (df.groupby(grouping).cumcount() * 4 - 5000)
df.loc[df.groupby(grouping).filter(lambda x: x[['start', 'end']].sum().sum() == 0).index, 'time'] = np.nan

Výstup:

>>> df
   start  end    time
0      1    0 -5000.0
1      0    0 -4996.0
2      0    0 -4992.0
3      0    0 -4988.0
4      0    0 -4984.0
5      0    1 -4980.0
6      0    0     NaN
7      0    0     NaN
8      1    0 -5000.0
9      0    0 -4996.0
2021-11-23 20:03:18

Děkuji moc - to je přesně to, co jsem potřeboval
KateP

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................