Данные:
import numpy as np
import pandas as pd
data={'o1_sp1_seg1.wav': np.array([ 0. , 1 ]),
'o1_sp1_seg3.wav': np.array([2, 3, 0. ]),
'o2_sp1_seg1.wav': np.array([6,7, 11, 8, 9 ]),
'o2_sp1_seg2.wav': np.array([6,3 ]),
'o2_sp1_seg5.wav': np.array([6,7, 9]),
'o5_sp1_seg3.wav': np.array([1, 6 ])
}
Чтобы получить столбцы seg_index и seg_original, мы здесь отфильтровываем DataFrame на основе столбца name , используя встроенную функцию startsith. На основании которого мы увеличиваем его текущий индекс и вычисляем сегментированный индекс.
df=pd.DataFrame(columns=['name','value', 'index','seg_index','seg_original'])
for indx, key in enumerate(data):
for val in data[key]:
seg_original = key.split('_')[-1].split('.')[0]
filtered_df = df[df['name'].apply(lambda x: x.startswith(key.split('_')[0]))]
index = len(filtered_df)+1
if index != 1:
curr_index = int(filtered_df['seg_index'].max(axis = 0))
seg_index = curr_index if seg_original in filtered_df['seg_original'].to_list() else curr_index+1
else:
seg_index =1
df.loc[len(df)] = [key,int(val),index,seg_index,seg_original]
Вывод:
+-----------------+---------+---------+-------------+----------------+
| name | value | index | seg_index | seg_original |
|-----------------+---------+---------+-------------+----------------|
| o1_sp1_seg1.wav | 0 | 1 | 1 | seg1 |
| o1_sp1_seg1.wav | 1 | 2 | 1 | seg1 |
| o1_sp1_seg3.wav | 2 | 3 | 2 | seg3 |
| o1_sp1_seg3.wav | 3 | 4 | 2 | seg3 |
| o1_sp1_seg3.wav | 0 | 5 | 2 | seg3 |
| o2_sp1_seg1.wav | 6 | 1 | 1 | seg1 |
| o2_sp1_seg1.wav | 7 | 2 | 1 | seg1 |
| o2_sp1_seg1.wav | 11 | 3 | 1 | seg1 |
| o2_sp1_seg1.wav | 8 | 4 | 1 | seg1 |
| o2_sp1_seg1.wav | 9 | 5 | 1 | seg1 |
| o2_sp1_seg2.wav | 6 | 6 | 2 | seg2 |
| o2_sp1_seg2.wav | 3 | 7 | 2 | seg2 |
| o2_sp1_seg5.wav | 6 | 8 | 3 | seg5 |
| o2_sp1_seg5.wav | 7 | 9 | 3 | seg5 |
| o2_sp1_seg5.wav | 9 | 10 | 3 | seg5 |
| o5_sp1_seg3.wav | 1 | 1 | 1 | seg3 |
| o5_sp1_seg3.wav | 6 | 2 | 1 | seg3 |
+-----------------+---------+---------+-------------+----------------+