在熊猫上追加后仅保留重复的索引

时间:2018-08-28 19:35:11

标签: python pandas dataframe append

我试图形成一个时间序列,并附加了2014年和2015年数据库中的数据。事情是,我只需要观察我的身份证在两年中都在哪里。我知道如何在水平合并中执行此操作,但是有没有一种方法可以通过附加操作完成?否则,有没有办法重塑我的合并数据?

我的数据如下:

df14

id year value1 value2
1  2014   a       x
2  2014   b       y

df15

id year value1 value2
2  2015   c       w
3  2015   d       z

在这种情况下,我只想要一个看起来像这样的DataFrame:

id year value1 value2
2  2015   c       w
2  2014   b       y

但是df14.append(df15)带来了一个完整的追加,并且没有索引匹配选项。

有没有办法做到这一点?即使它很简单,也找不到。

预先感谢

2 个答案:

答案 0 :(得分:3)

您可以将duplicatedkeep=False参数一起使用来对串联的DataFrame进行子集化。

df = pd.concat([df14, df15], ignore_index=True)
df[df.duplicated('id', keep=False)]

输出:

   id  year value1 value2
1   2  2014      b      y
2   2  2015      c      w

就Wen的观点而言,如果一帧中有重复项,并且您只需要选择跨不同年份的重复项,则用transform作为子集。

df[df.groupby('id').year.transform(lambda x: x.nunique() > 1)]
# or 
df.groupby('id').filter(lambda x: x.year.nunique() > 1)

答案 1 :(得分:2)

  1. 将两个数据帧的索引设置为'id'
  2. align方法与inner参数一起使用
  3. 附加数据框并重置索引

d14, d15 = df14.set_index('id').align(df15.set_index('id'), 'inner')

d14.append(d15).reset_index()

   id  year value1 value2
0   2  2014      b      y
1   2  2015      c      w