Сравнить с предыдущим значением и объединить результаты

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

Пожалуйста, считайте меня новичком в pandas.

У меня есть фрейм данных, как показано ниже

         id      refseqno        xml
0   28893323        2       <my_xml>...</my_xml>
1   29057856        6       <my_xml>...</my_xml>
2   29417872        18      <my_xml>...</my_xml>
3   30081656        58      <my_xml>...</my_xml>
4   34470834        6       <my_xml>...</my_xml>
5   35025043        19      <my_xml>...</my_xml>
6   35025043        45      <my_xml>...</my_xml>
7   35025043        7       <my_xml>...</my_xml>
8   37761341        13      <my_xml>...</my_xml>
9   42458085        23      <my_xml>...</my_xml>
  

Я хочу сравнить текущее id значение с предыдущим id значением. Если они одинаковы, то мне нужно получить все refseqno's и в одной строке, чтобы была одна строка с одинаковым идентификатором, но в этой строке должны быть все refseqno's

         id      refseqno        xml
0   28893323        2           <my_xml>...</my_xml>
1   29057856        6           <my_xml>...</my_xml>
2   29417872        18          <my_xml>...</my_xml>
3   30081656        58          <my_xml>...</my_xml>
4   34470834        6           <my_xml>...</my_xml>
5   35025043        7,19,45     <my_xml>...</my_xml>
6   37761341        13          <my_xml>...</my_xml>
7   42458085        23          <my_xml>...</my_xml>
  

Ниже приведен код, который у меня есть, где я могу получить значение True или False, если предыдущее id значение, но не могу продолжить.

 import pandas as pd

df = pd.read_csv("my_file.csv", encoding='utf-8')
df.columns = ['id', 'refseqno', 'xml']
df_tmp['id'] = df['id'].shift(1)
df['valid'] = (df['id'] == df_tmp['id'])
df
  

Комментарии:

1. это должно сработать df.groupby('id')['refseqno'].agg(','.join) попробуйте.

2. Это работает, спасибо. Но как я могу получить вывод таким образом, чтобы в нем было 3 столбца, а именно id, refseqno и xml, где refseqno содержит seqno

3. Я добавил свой ответ, пожалуйста, обратитесь к этому.

Ответ №1:

Присоединиться refseqno с помощью groupby и agg функции, затем назначить refseqno после удаления дубликатов из df

 >>> df.drop_duplicates('id').assign(refseqno=df.astype(str).groupby('id')['refse
qno'].agg(','.join).values)

         id refseqno                   xml
0  28893323        2  <my_xml>...</my_xml>
1  29057856        6  <my_xml>...</my_xml>
2  29417872       18  <my_xml>...</my_xml>
3  30081656       58  <my_xml>...</my_xml>
4  34470834        6  <my_xml>...</my_xml>
5  35025043  19,45,7  <my_xml>...</my_xml>
8  37761341       13  <my_xml>...</my_xml>
9  42458085       23  <my_xml>...</my_xml>