【问题标题】:count lines equal with combinations in Python计算与 Python 中的组合相等的行数
【发布时间】:2022-11-15 17:26:53
【问题描述】:

我有一个这样的数据框:

col1 col2 col3 col N
x y z f
y x z f
f none none none
z y x f

我需要计算相等的行,无论它们的组合如何。

这意味着,在这种情况下,输出应该是这样的:

col1 col2 col3 col N freq
x y z f 3
f none none none 1

这是因为,根据输入数据集,有三行具有相同的序列(第 1 行、第 2 行和第 4 行)。

我尝试使用函数“value_counts”,但是,根据文档,该函数仅计算唯一值。

注意初始数据集包含 200 多列。

任何解决方案?

谢谢

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以根据确切的逻辑(冻结集、排序元组等)将列聚合为唯一对象,然后计算执行groupby 的值:

    我会使用:

    out = df.agg(frozenset, axis=1).value_counts()
    
    # or, if NaN should be ignored
    out = df.agg(lambda x: frozenset(x.dropna()), axis=1).value_counts()
    

    注意。如果您可以有多个值以及考虑这些值的内容,请使用 sorted 代替 frozenset

    输出:

    (x, y, f, z)    3
    (f)             1
    dtype: int64
    

    如果您真的想要一个具有原始行之一的 DataFrame:

    g = df.groupby(df.agg(frozenset, axis=1), as_index=False)
    out = g.first().assign(freq=g['col1'].count())
    

    输出:

      col1  col2  col3  colN  freq
    0    x     y     z     f     3
    1    f  None  None  None     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多