【问题标题】:Elegant way to get duplicate statistics like missing values using pandas使用 pandas 获取重复统计信息(如缺失值)的优雅方法
【发布时间】:2021-09-14 14:10:56
【问题描述】:

我有一个如下所示的数据框

df = pd.DataFrame({'subject_id': [101,101,np.nan,201,202],
                  'test_id':['A1','A1','A3',np.nan,'A4']})

这在数据框中既有缺失值又有重复值

我想获取跨列缺失值和重复值的统计信息。

当我尝试以下方法时,它可以很好地处理丢失的列

percent_missing = df.isna().sum() * 100 / len(df)
pd.DataFrame({'column_name': df.columns,
              'percent_missing': percent_missing})

但是对于重复项,我想像上面那样写,但这显然是不正确的。它不会按列返回我的输出(而是为我提供数据帧级别)

我不能使用 subset,因为我想像上面使用 isna() 对 missing 所做的那样,一次检查所有列中的重复值

percent_duplicates = df.duplicated().sum() * 100 / len(df)
pd.DataFrame({'column_name': df.columns,
              'percent_duplicates': percent_duplicates})

我希望我的输出如下所示

【问题讨论】:

    标签: python pandas dataframe numpy pandas-groupby


    【解决方案1】:

    您可以使用列表推导:

    df_len = len(df)
    percent_duplicates = [df[col].duplicated(keep=False).sum() * 100 / df_len
                          for col in df]
    

    apply:

    percent_duplicates = df.apply(lambda col:
                                  col.duplicated(keep=False).sum() * 100 / df_len)
    

    我们在哪里传递keep=False,以便所有重复项都标记为True

    得到

    >>> pd.DataFrame({"column_name": df.columns,
                      "percent_duplicates": percent_duplicates})
    
      column_name  percent_duplicates
    0  subject_id                40.0
    1     test_id                40.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2022-02-09
      • 2021-06-27
      • 2012-01-09
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      相关资源
      最近更新 更多