, @DSM. start end , groupby aggregate length. pivot .
start = [35, 36, 37, 36, 35]
end = [56, 56, 56, 58, 58]
events = ['A', 'B', 'C', 'A', 'A']
df = pd.DataFrame( {'start': start, 'end': end, 'events': events})
new_df = pd.DataFrame({ 'times': df['start'].append(df['end']), 'events': df['events'].append(df['events']) })
new_df = new_df.groupby(['times', 'events']).agg(len)
new_df = new_df.reset_index().pivot('times', 'events').fillna(0)
:
events times
0 A 35
1 B 36
2 C 37
3 A 36
4 A 35
0 A 56
1 B 56
2 C 56
3 A 58
4 A 58
groupby:
times events
35 A 2
36 A 1
B 1
37 C 1
56 A 1
B 1
C 1
58 A 2
, , :
events A B C
times
35 2 0 0
36 1 1 0
37 0 0 1
56 1 1 1
58 2 0 0
, @DSM , , , append , . , .