如何按列自动过滤行

时间:2016-12-24 16:41:42

标签: python pandas

我的pandas数据框如下:

df =

COL_1   COL_2   VAL_1
ABC     AAA     ABC
CDE     CDE     RTY
ABC     ABC     RTY
ABC     RTY     DEF

我想计算从COL开始的列中包含任何唯一值的行数:COL_1COL_2VAL_1不应使用)。

预期结果是:

GROUP   COUNT
ABC     3
CDE     2
RTY     1
AAA     1

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

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

我尝试了这个,但是在1Gb的数据集上需要很长时间才能得到一些不正确的结果。另外,我不知道如何避免指定GROUPstr.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

2 个答案:

答案 0 :(得分:5)

或者您可以使用ChildEventListener userHistoryAddressChildEventListener = new ChildEventListener() { @Override public void onChildAdded(final DataSnapshot snapshot, String prevKey) { new Thread(new Runnable() { @Override public void run() { // get toy history for current user UserHistory.ToyHistory toyHistory = snapshot.getValue(UserHistory.ToyHistory.class); ToyManager.getInstance().addToyHistory( mFireBaseAuth.getCurrentUser().getUid(), toyHistory.getToy(), toyHistory.getTime(), toyHistory.getColor(), toyHistory.getHistoryId()); } }).start(); }

value_counts()

答案 1 :(得分:2)

这是你想要的吗?

In [12]: df.filter(like='COL_').stack().to_frame('COL').groupby('COL').size()
Out[12]:
COL
AAA    1
ABC    4
CDE    2
RTY    1
dtype: int64