如何按列自动过滤行

Din*_*ius 2 python pandas

我有pandas数据帧如下:

df =

COL_1   COL_2   VAL_1
ABC     AAA     ABC
CDE     CDE     RTY
ABC     ABC     RTY
ABC     RTY     DEF
Run Code Online (Sandbox Code Playgroud)

我想caculate含有从开始列的任意唯一值的行数COL:COL_1COL_2(VAL_1不应使用).

预期的结果是:

GROUP   COUNT
ABC     3
CDE     2
RTY     1
AAA     1
Run Code Online (Sandbox Code Playgroud)

一种可能性是手动指定列名称并计算行数,同时手动指定所有可能的值GROUP.但很明显,如果列数和值的GROUP数量很大,这个解决方案就不好了.

怎么自动完成?我认为该方法应该是过滤所有具有tunique值的行,以列开头COL

我尝试过这个,但是在1Gb的数据集上需要很长时间才能得到一些不正确的结果.另外我不知道如何避免指定以下值GROUP:str.contains('ABC').

t_cols = [c for c in df.columns.values if not c.startswith('COL')]
aa = df.drop(t_cols,axis=1)
aa.apply(lambda row: row.astype(str).str.contains('ABC').any(), axis=1).shape
Run Code Online (Sandbox Code Playgroud)

Psi*_*dom 5

或者您可以使用value_counts():

df.filter(regex = "^COL").stack().value_counts()

#ABC    4
#CDE    2
#AAA    1
#RTY    1
#dtype: int64
Run Code Online (Sandbox Code Playgroud)