python - 在 pandas 上追加后仅保留重复的索引

标签 python pandas dataframe append

我正在尝试形成一个时间序列,并 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 ,并且没有索引匹配选项。

有办法做到这一点吗?找不到它,尽管它应该很简单。

提前致谢

最佳答案

您可以将 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)

关于python - 在 pandas 上追加后仅保留重复的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52065088/

相关文章:

python - 绘制轮廓子图,每个子图都有自己的颜色条

Python Pandas key 错误 : 'the label is not in the [index]'

r - 将名为List的混合长度转换为data.frame

python - 根据分位数值修剪系列/数据框

python - 我似乎也无法加入语音 channel discord.py

python - 扩展在 pygame 中制作的线框 3d 形状

python - 如果值=1(二进制值),则提取列名并将它们与分隔符组合并将其放入新列中

python - 如何遍历 Pandas 数据透视表? (多索引数据框?)

r - 如何使用 POSIXct 类型的列初始化 data.frame?

python - 使用带 zip 压缩的 pandas read_csv