首页 > 解决方案 > 与之前的值比较并合并结果

问题描述

请考虑我是熊猫的新手。

我有一个如下的数据框

        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

标签: python-3.xpandas

解决方案


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>

推荐阅读