我试图形成一个时间序列,并附加了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)
带来了一个完整的追加,并且没有索引匹配选项。
有没有办法做到这一点?即使它很简单,也找不到。
预先感谢
答案 0 :(得分:3)
您可以将duplicated
与keep=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)
'id'
列align
方法与inner
参数一起使用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