#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>