【问题标题】:How to delete rows having same value in more than 3 columns如何删除超过 3 列中具有相同值的行
【发布时间】:2019-03-13 02:31:01
【问题描述】:

我有以下数据框。

A   B   C   D   E   F   G
1   4   9   4   6   9   8
2   2   2   2   2   5   9
2   2   2   2   2   2   2
2   6   9   5   4   4   5
2   8   1   9   5   8   9
2   2   2   5   6   3   6

我需要如下输出:

A   B   C   D   E   F   G
1   4   9   4   6   9   8
2   6   9   5   4   4   5
2   8   1   9   5   8   9
2   2   2   5   6   3   6

这意味着应该删除rows having more than three columns as same value。 我们可以看到第二行和第三行分别有 5 和 7 列作为相同的值。我们需要删除这些行。

有什么可以帮助我的。

【问题讨论】:

  • same value in more than 3 columns - 按顺序或任何顺序?
  • 问题与numpymachine-learning 无关 - 请不要向标签发送垃圾邮件(已删除)。
  • @desertnaut 熊猫数据框将 NumPy 数组作为基础数据。所以 NumPy 可能是相关的。此外,对于性能,它很有用。
  • @Divakar..任何订单。

标签: python pandas numpy dataframe


【解决方案1】:

方法#1

对于带有ints 的数据框,这是带有bincount 的矢量化数据框-

# https://stackoverflow.com/a/46256361/ @Divakar
def bincount2D_vectorized(a):    
    N = a.max()+1
    a_offs = a + np.arange(a.shape[0])[:,None]*N
    return np.bincount(a_offs.ravel(), minlength=a.shape[0]*N).reshape(-1,N)

out = df[(bincount2D_vectorized(df.values)<=3).all(1)]

样本输出 -

In [563]: df[(bincount2D_vectorized(df.values)<=3).all(1)]
Out[563]: 
   A  B  C  D  E  F  G
0  1  4  9  4  6  9  8
3  2  6  9  5  4  4  5
4  2  8  1  9  5  8  9
5  2  2  2  5  6  3  6

【讨论】:

  • 有方法#2吗?我有兴趣:)
【解决方案2】:

这是一个通过 pd.DataFrame.applypd.Series.value_counts 实现的天真的 Pandas 循环:

def max_count(s):
    return s.value_counts().values[0]

res = df[df.apply(max_count, axis=1).le(3)]

print(res)

   A  B  C  D  E  F  G
0  1  4  9  4  6  9  8
3  2  6  9  5  4  4  5
4  2  8  1  9  5  8  9
5  2  2  2  5  6  3  6

【讨论】:

    【解决方案3】:

    您可以使用只有唯一值的集合。如果一行有 3 个相等的值,则 len(set(row)) = len(row) - 2。 遍历数据框以查找这些行并存储它们的索引。

    indexes_to_remove = []
    for index, row in df.iterrows():
        if len(set(row)) < len(row) - 2:
            indexes_to_remove.append(index)
    

    然后你就可以安全地移除它们了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多