我的pandas数据框如下:
df =
COL_1 COL_2 VAL_1
ABC AAA ABC
CDE CDE RTY
ABC ABC RTY
ABC RTY DEF
我想计算从COL
开始的列中包含任何唯一值的行数:COL_1
和COL_2
(VAL_1
不应使用)。
预期结果是:
GROUP COUNT
ABC 3
CDE 2
RTY 1
AAA 1
一种可能性是手动指定列名并计算行数,同时手动指定GROUP
的所有可能值。但是,如果GROUP
中的列数和值很大,这个解决方案显然不太好。
如何自动完成?我认为该方法应该是过滤所有具有以COL
开头的列的tunique值的行?
我尝试了这个,但是在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
答案 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