numpy 如何逐行删除重复值,但保留行和特定行值

ryhaxcpt  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个数据集,想删除重复的值,但保留这些行。这是我的:
df =

id     column_a     column_b      column_c     name
 101      abc          def           ghi        adam
 101      abc          def           ghi        brook
 101      abc          def           ghi        chris

字符串
我只想保持最上面的一行不变,但所有其他具有相同id值的行都删除了所有值,但没有删除行,只留下idname列。就像这样:

id      column_a      column_b     column_c      name 
101       abc            def          ghi        adam
101                                              brook
101                                              chris


我做了df['column_a'] = np.where(df['id'] = df['id'].shift(1), '', df['column_a'],这似乎起作用了,我只是想找到一种更有效的方法来做到这一点。- 谢谢你-谢谢

6kkfgxo0

6kkfgxo01#

您可以使用duplicatedmask所需的列:

ignore = ['id', 'name']

out = (df[ignore].combine_first(
            df.drop(columns=ignore)
              .apply(lambda s: s.mask(s.duplicated(), ''))
            )
       [df.columns]
      )

字符串
输出量:

id column_a column_b column_c   name
0  101      abc      def      ghi   adam
1  101                             brook
2  101                             chris


每组:

ignore = ['id', 'name']
out = (df[ignore]
       .combine_first(df.drop(columns=ignore)
                        .apply(lambda s: s.mask(s.groupby(df['id'])
                                                 .transform(lambda s: s.duplicated()),
                                                '')))
       [df.columns]
      )


示例如下:

id column_a column_b column_c   name
0  101      abc      def      ghi   adam
1  101                             brook
2  101                             chris
3  102      abc      def      ghi  chris

相关问题