【问题标题】:Pandas how do I compare columns for equality in a dataframe that have the same name except for a suffix?熊猫如何比较数据框中具有相同名称但后缀除外的列是否相等?
【发布时间】:2023-01-14 01:56:50
【问题描述】:

我有一个数据框,其中有很多列,格式如下:

id col1_df1 col2_df1 col3_df1 col1_df2 col2_df2 col3_df2
A1 num num num num num num
A2 num num num num num num
A3 num num num num num num
A4 num num num num num num
A5 num num num num num num

我需要比较前缀前具有相同名称的列。也就是说,我需要比较col1_df1col1_df2col2_df1col2_df2,等等。我需要检查每个“重复”列(每个 col1、每个 col2 等)中的相等百分比。我无法手动完成,因为有很多列。

有没有办法使用 Pandas 功能来做到这一点?

谢谢!

【问题讨论】:

    标签: python pandas dataframe compare


    【解决方案1】:
    (df.groupby(lambda col: col.partition("_")[0], axis="columns")
       .diff().dropna(how="all", axis="columns")
       .eq(0).sum()
       .div(len(df)).mul(100)
       .rename(lambda idx: idx.split("_")[0]))
    
    • 将数据框分组在“_”之前的列名称上,即 col_{i} 的
    • 取每组的差值
      • 因为每组的第一列没有任何剩余,它们将是 NaN,所以放弃它们
    • 检查差异等于 0 的地方,即重复:求和给出计数
    • 然后将其百分比化
    • 最后获取最终结果的组名(col_{i}'s)

    得到类似的东西(对于一些随机数据)

    col1    40.0
    col2     0.0
    col3    33.3
    dtype: float64
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2021-12-19
      • 2018-06-20
      • 2018-09-03
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多