python-3.x - 与之前的值比较并合并结果
问题描述
请考虑我是熊猫的新手。
我有一个如下的数据框
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
在一行中获取所有内容,以便相同的 id 存在单行,但该行应该包含所有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
解决方案
refseqno
使用 groupby 和函数加入,agg
然后在删除重复项后分配给 refseqnodf
>>> 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>