df.dropNulls { city }.pivotCounts(inward = false) { city }
Input DataFrame: rowsCount = 7, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
AliceWolf20null55false
CharlieByrd30Moscow90true

Step 1: DataFrame: rowsCount = 6, columnsCount = 5
nameagecityweightisHappy
firstNamelastName
AliceCooper15London54true
BobDylan45Dubai87true
CharlieDaniels20Moscownullfalse
CharlieChaplin40Milannulltrue
BobMarley30Tokyo68true
CharlieByrd30Moscow90true

Output DataFrame: rowsCount = 6, columnsCount = 9
nameageweightisHappyLondonDubaiMoscowMilanTokyo
firstNamelastName
AliceCooper1554true10000
BobDylan4587true01000
CharlieDaniels20nullfalse00100
CharlieChaplin40nulltrue00010
BobMarley3068true00001
CharlieByrd3090true00100


pivoted.gather { "London".."Tokyo" }.into("city", "population")
Input DataFrame: rowsCount = 6, columnsCount = 9
nameageweightisHappyLondonDubaiMoscowMilanTokyo
firstNamelastName
AliceCooper1554true10000
BobDylan4587true01000
CharlieDaniels20nullfalse00100
CharlieChaplin40nulltrue00010
BobMarley3068true00001
CharlieByrd3090true00100

Step 1: Gather
nameageweightisHappykeyvalue
firstNamelastName
AliceCooper1554trueLondon1
AliceCooper1554trueDubai0
AliceCooper1554trueMoscow0
AliceCooper1554trueMilan0
AliceCooper1554trueTokyo0
BobDylan4587trueLondon0
BobDylan4587trueDubai1
BobDylan4587trueMoscow0
BobDylan4587trueMilan0
BobDylan4587trueTokyo0
CharlieDaniels20nullfalseLondon0
CharlieDaniels20nullfalseDubai0
CharlieDaniels20nullfalseMoscow1
CharlieDaniels20nullfalseMilan0
CharlieDaniels20nullfalseTokyo0
CharlieChaplin40nulltrueLondon0
CharlieChaplin40nulltrueDubai0
CharlieChaplin40nulltrueMoscow0
CharlieChaplin40nulltrueMilan1
CharlieChaplin40nulltrueTokyo0

... showing only top 20 of 30 rows

Output DataFrame: rowsCount = 30, columnsCount = 6
nameageweightisHappycitypopulation
firstNamelastName
AliceCooper1554trueLondon1
AliceCooper1554trueDubai0
AliceCooper1554trueMoscow0
AliceCooper1554trueMilan0
AliceCooper1554trueTokyo0
BobDylan4587trueLondon0
BobDylan4587trueDubai1
BobDylan4587trueMoscow0
BobDylan4587trueMilan0
BobDylan4587trueTokyo0
CharlieDaniels20nullfalseLondon0
CharlieDaniels20nullfalseDubai0
CharlieDaniels20nullfalseMoscow1
CharlieDaniels20nullfalseMilan0
CharlieDaniels20nullfalseTokyo0
CharlieChaplin40nulltrueLondon0
CharlieChaplin40nulltrueDubai0
CharlieChaplin40nulltrueMoscow0
CharlieChaplin40nulltrueMilan1
CharlieChaplin40nulltrueTokyo0

... showing only top 20 of 30 rows