Я довольно новичок в python pandas и не могу найти ответ на мою проблему в каких-либо старых постах.
У меня есть простой фрейм данных, который выглядит примерно так:
dfA ={'stop':[1,2,3,4,5,1610,1611,1612,1613,1614,2915,...]
'seq':[B, B, D, A, C, C, A, B, A, C, A,...] }
СейчасЯ хочу объединить значения 'seq' из каждой группы, где разница между следующим и предыдущим значением в 'stop' равна 1. Когда разница велика, например, 5 и 1610, именно здесь начинается следующий кластер, и таквкл.
Мне нужно записать все значения из каждого кластера в отдельные строки:
0 BBDAC #join'stop' cluster 1-5
1 CABAC #join'stop' cluster 1610-1614
2 A.... #join'stop' cluster 2015 - ...
etc...
То, что я получаю с моим текущим кодом, выглядит так:
True BDACABAC...
False BCA...
для всего огромного фрейма данных.
Я понимаю логику, с которой он сливается, что соответствует указанному мною условию (не идеальное, потеря краев кластера), но у меня заканчиваются идеи, если яможно соединить его и правильно разделить на кластеры, а не на все строки кадра данных.
Пожалуйста, смотрите мой код ниже:
dfB = dfA.groupby((dfA.stop - dfA.stop.shift(1) == 1))['seq'].apply(lambda x: ''.join(x)).reset_index()
Пожалуйста, помогите.
PS Iтакже попробовал вариКомбинации с diff (), но это тоже не помогло.Я не уверен, хорош ли groupby для этого решения.Пожалуйста, порекомендуйте!
dfC = dfA.groupby((dfA['stop'].diff(periods=1)))['seq'].apply(lambda x: ''.join(x)).reset_index()
Это каким-то образом разделило фрейм данных на более мелкие куски, похожие на кластеры, но я не понимаю принципа, лежащего в основе того, как он это сделал, и я знаю, что результат не имеет смысла, и это не то, что я хотелчтобы получить.