我正在尝试形成一个时间序列,并 append 了 2014 年和 2015 年数据库中的数据。问题是,我只需要观察我的身份证在这两年中都存在的情况。我知道如何在水平合并上执行此操作,但是有没有办法通过 append 来执行此操作?或者,有没有办法 reshape 我的合并数据?
我的数据如下所示:
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)
带来了完整的 append ,并且没有索引匹配选项。
有办法做到这一点吗?找不到它,尽管它应该很简单。
提前致谢
最佳答案
您可以将 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)
关于python - 在 pandas 上追加后仅保留重复的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52065088/