python - 将重复项添加为列并删除其他行

标签 python pandas dataframe

我有一个带有一些重复 ID 的 df,如下所示:

index    ID    name    surname
1        1     a       x
2        2     b       y
3        1     c       z
4        3     d       j 

我想将重复行的列附加到右侧并删除“单个”行,如下所示:

index    ID    name   surname   second_name   second_surname
1        1     a      x         c             z

最有效的方法是什么? (我有数百万行)

最佳答案

尝试使用drop_duplicates , mergequery像这样:

df['second_name'] = (df.drop_duplicates(subset='ID')
                     .reset_index()
                     .merge(df, on='ID', how='inner', suffixes=('', '_'))
                     .query("name != name_")
                     .set_index('level_0')['name_'])

[输出]

   index  ID name second_name
0      1   1    a           c
1      2   2    b         NaN
2      3   1    c         NaN
3      4   3    d         NaN

如果您只需要单行,请使用 dropna :

df.dropna(subset=['second_name'])

[输出]

   index  ID name second_name
0      1   1    a           c

关于python - 将重复项添加为列并删除其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972170/

相关文章:

python - 返回两个 3xN 数组的叉积的方法(例如时间相关向量)

python - 您可以使用 ffmpeg 流从文件实时插入文本吗?

python - Pandas:通过对来自不同 df 的列求和来创建新 df 的 Pythonic 方式

python - 在 Python 3 中向数组添加坐标

python - 在给定 Pandas 条件的情况下,获取另一列的平均值

对 data.frame 中的元素进行排名

python - Pandas 日期时间格式

python - 从 mask rcnn 中提取分割掩码

python - 如何合并pandas中的多列值?

python - 使用条件 cumsum 的自定义聚合