Skip to content

Commit a558805

Browse files
authored
Merge pull request #217 from jecisc/add-basic-concatenation
Add a basic concatenation
2 parents 8764cfe + 83125b9 commit a558805

2 files changed

Lines changed: 63 additions & 0 deletions

File tree

src/DataFrame-Tests/DataFrameTest.class.st

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,6 +932,55 @@ DataFrameTest >> testColumnsSubset [
932932
self assert: actualDataFrame equals: expectedDataFrame
933933
]
934934

935+
{ #category : #tests }
936+
DataFrameTest >> testConcatenation [
937+
938+
| df1 df2 df3 df4 |
939+
df1 := DataFrame
940+
withColumns: #( #( 'A1' 'A2' 'A3' 'A4' ) #( 'B1' 'B2' 'B3' 'B4' ) #( 'C1' 'C2' 'C3' 'C4' ) #( 'D1' 'D2' 'D3' 'D4' ) )
941+
rowNames: #( 1 2 3 4 )
942+
columnNames: #( 'A' 'B' 'C' 'D' ).
943+
df2 := DataFrame
944+
withColumns: #( #( 'A5' 'A6' 'A7' 'A8' ) #( 'B5' 'B6' 'B7' 'B8' ) #( 'C5' 'C6' 'C7' 'C8' ) #( 'D5' 'D6' 'D7' 'D8' ) )
945+
rowNames: #( 5 6 7 8 )
946+
columnNames: #( 'A' 'B' 'C' 'D' ).
947+
df3 := DataFrame
948+
withColumns: #( #( 'A9' 'A10' 'A11' 'A12' ) #( 'B9' 'B10' 'B11' 'B12' ) #( 'C9' 'C10' 'C11' 'C12' ) #( 'D9' 'D10' 'D11' 'D12' ) )
949+
rowNames: #( 9 10 11 12 )
950+
columnNames: #( 'A' 'B' 'C' 'D' ).
951+
952+
953+
df4 := DataFrame
954+
withColumns:
955+
#( #( 'A1' 'A2' 'A3' 'A4' 'A5' 'A6' 'A7' 'A8' 'A9' 'A10' 'A11' 'A12' ) #( 'B1' 'B2' 'B3' 'B4' 'B5' 'B6' 'B7' 'B8' 'B9' 'B10' 'B11' 'B12' )
956+
#( 'C1' 'C2' 'C3' 'C4' 'C5' 'C6' 'C7' 'C8' 'C9' 'C10' 'C11' 'C12' ) #( 'D1' 'D2' 'D3' 'D4' 'D5' 'D6' 'D7' 'D8' 'D9' 'D10' 'D11' 'D12' ) )
957+
rowNames: #( 1 2 3 4 5 6 7 8 9 10 11 12 )
958+
columnNames: #( 'A' 'B' 'C' 'D' ).
959+
960+
self assert: df1 , df2 , df3 equals: df4
961+
]
962+
963+
{ #category : #tests }
964+
DataFrameTest >> testConcatenationWithMissingValues [
965+
966+
| df1 df2 df4 |
967+
self skip. "WE need to check better how other libraries are managing this case."
968+
df1 := DataFrame
969+
withColumns: #( #( 'A1' 'A2' 'A3' 'A4' ) #( 'B1' 'B2' 'B3' 'B4' ) #( 'C1' 'C2' 'C3' 'C4' ) #( 'D1' 'D2' 'D3' 'D4' ) )
970+
columnNames: #( 'A' 'B' 'C' 'D' ).
971+
df2 := DataFrame withColumns: #( #( 'B3' 'B4' 'B7' 'B8' ) #( 'D3' 'D4' 'D7' 'D8' ) #( 'F3' 'F4' 'F7' 'F8' ) ) columnNames: #( 'B' 'D' 'F' ).
972+
973+
df2 rowNames: #( 3 4 7 8 ).
974+
975+
976+
df4 := DataFrame
977+
withColumns: #( #( 'A1' 'A2' 'A3' 'A4' nil nil ) #( 'B1' 'B2' 'B3' 'B4' nil nil ) #( 'C1' 'C2' 'C3' 'C4' nil nil ) #( 'D1' 'D2' 'D3' 'D4' nil nil )
978+
#( nil nil 'B3' 'B4' 'B7' 'B8' ) #( nil nil 'D3' 'D4' 'D7' 'D8' ) #( nil nil 'F3' 'F4' 'F7' 'F8' ) )
979+
columnNames: #( 'A' 'B' 'C' 'D' 'B' 'D' 'F' ).
980+
df4 rowNames: #( 1 2 3 4 7 8 ).
981+
self assert: df1 , df2 equals: df4
982+
]
983+
935984
{ #category : #tests }
936985
DataFrameTest >> testCopy [
937986

src/DataFrame/DataFrame.class.st

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,20 @@ DataFrame class >> withRows: anArrayOfArrays rowNames: anArrayOfRowNames columnN
297297
ifEmpty: [ self withColumnNames: anArrayOfColumnNames ]
298298
]
299299

300+
{ #category : #comparing }
301+
DataFrame >> , aDataFrame [
302+
303+
| dataFrame rows |
304+
self columnNames = aDataFrame columnNames ifFalse: [ self error: 'Not yet supported.' ].
305+
(self rowNames includesAny: aDataFrame rowNames) ifTrue: [ self error: 'Not yet supported.' ].
306+
307+
dataFrame := self copy.
308+
rows := aDataFrame asArrayOfRows.
309+
aDataFrame rowNames doWithIndex: [ :name :index | dataFrame addRow: (rows at: index) named: name ].
310+
311+
^ dataFrame
312+
]
313+
300314
{ #category : #comparing }
301315
DataFrame >> = aDataFrame [
302316

0 commit comments

Comments
 (0)