Home > Software engineering >  Splitting a DataFrame in chunks by value appearance
Splitting a DataFrame in chunks by value appearance

Time:01-06

I want to split a Pandas DataFrame in chunks each time a value certain appears

Given the DataFrame:

Timestamp     Value
Jan 1 12:32   11
Jan 1 12:50   10
Jan 1 13:01   11
Jan 1 16:05   10
Jan 1 11:05   09
Jan 1 16:10   11
Jan 1 16:22   10

I want to have a list with the following DataFrames

1 Timestamp     Value
  Jan 1 12:32   11
  Jan 1 12:50   10
2 Timestamp     Value
  Jan 1 13:01   11
  Jan 1 16:05   10
  Jan 1 11:05   09
3 Timestamp     Value
  Jan 1 16:10   11
  Jan 1 16:22   10

Every time the value 11 appears I want to split the DataFrame.

CodePudding user response:

np.split(tmp, np.where([tmp['Value'] == 11])[1][1:])

Results in

[      Timestamp  Value
 Jan 1     12:32     11
     1     12:50     10,
       Timestamp  Value
 Jan 1     13:01     11
     1     16:05     10,
       Timestamp  Value
 Jan 1     16:10     11
     1     16:22     10]

CodePudding user response:

You can create a grouping Series that changes value each time 11 appears. Then use those groupings to create a list:

groups = df["Value"].eq(11).cumsum()
df_list = [g[1] for g in df.groupby(groups)]

print(df_list)
[     Timestamp  Value
0  Jan 1 12:32     11
1  Jan 1 12:50     10,
      Timestamp  Value
2  Jan 1 13:01     11
3  Jan 1 16:05     10,
      Timestamp  Value
4  Jan 1 16:10     11
5  Jan 1 16:22     10]
  •  Tags:  
  • Related