df.select { colsAtAnyDepth().filter { !it.isColumnGroup() }.take(3) }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 3
firstNamelastNameage
AliceCooper15
BobDylan45
CharlieDaniels20
CharlieChaplin40
BobMarley30
AliceWolf20
CharlieByrd30


df.select { colsAtAnyDepth().filter { !it.isColumnGroup() }.takeLast(3) }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 3
cityweightisHappy
London54true
Dubai87true
Moscownullfalse
Milannulltrue
Tokyo68true
null55false
Moscow90true


df.select { colsAtAnyDepth().filter { !it.isColumnGroup() }.drop(3) }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 3
cityweightisHappy
London54true
Dubai87true
Moscownullfalse
Milannulltrue
Tokyo68true
null55false
Moscow90true


df.select { colsAtAnyDepth().filter { !it.isColumnGroup() }.dropLast(3) }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 3
firstNamelastNameage
AliceCooper15
BobDylan45
CharlieDaniels20
CharlieChaplin40
BobMarley30
AliceWolf20
CharlieByrd30


df.select { colsAtAnyDepth().filter { !it.isColumnGroup() && it.name().startsWith("year") } }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 0, columnsCount = 0


df.select { colsAtAnyDepth().filter { !it.isColumnGroup() }.except { age } }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 5
firstNamelastNamecityweightisHappy
AliceCooperLondon54true
BobDylanDubai87true
CharlieDanielsMoscownullfalse
CharlieChaplinMilannulltrue
BobMarleyTokyo68true
AliceWolfnull55false
CharlieByrdMoscow90true


df.select { (colsOf<Int>() and age).distinct() }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 7, columnsCount = 1
age
15
45
20
40
30
20
30