Skip to content

Commit 774639b

Browse files
Fixed #106. addRow: now considers key ordering.
1 parent 137c9ce commit 774639b

2 files changed

Lines changed: 64 additions & 9 deletions

File tree

src/DataFrame-Tests/DataFrameTest.class.st

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,28 @@ DataFrameTest >> testAddRowAtPosition [
236236
self assert: df equals: expected
237237
]
238238

239+
{ #category : #tests }
240+
DataFrameTest >> testAddRowAtPositionWithKeysAsColumnNames [
241+
| row expected |
242+
243+
row := DataSeries
244+
withKeys: #( 'Population' 'BeenThere' 'City' )
245+
values: #( 2.141 true Paris )
246+
name: 'X'.
247+
df addRow: row atPosition: 2.
248+
249+
expected := DataFrame withRows: #(
250+
(Barcelona 1.609 true)
251+
(Paris 2.141 true)
252+
(Dubai 2.789 true)
253+
(London 8.788 false)).
254+
255+
expected rowNames: #(A X B C).
256+
expected columnNames: #(City Population BeenThere).
257+
258+
self assert: df equals: expected
259+
]
260+
239261
{ #category : #tests }
240262
DataFrameTest >> testAddRowNameMustBeDistinct [
241263

@@ -295,6 +317,28 @@ DataFrameTest >> testAddRowSizeMismatch [
295317
self should: aBlock raise: SizeMismatch
296318
]
297319

320+
{ #category : #tests }
321+
DataFrameTest >> testAddRowWithKeysAsColumnNames [
322+
323+
| row expected |
324+
row := DataSeries
325+
withKeys: #( 'Population' 'BeenThere' 'City' )
326+
values: #( 2.141 true Paris )
327+
name: 'X'.
328+
df addRow: row.
329+
330+
expected := DataFrame withRows:
331+
#( #( Barcelona 1.609 true )
332+
#( Dubai 2.789 true )
333+
#( London 8.788 false )
334+
#( Paris 2.141 true ) ).
335+
336+
expected rowNames: #( A B C X ).
337+
expected columnNames: #( City Population BeenThere ).
338+
339+
self assert: df equals: expected
340+
]
341+
298342
{ #category : #tests }
299343
DataFrameTest >> testApplyElementwise [
300344

src/DataFrame/DataFrame.class.st

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -397,13 +397,31 @@ DataFrame >> addEmptyRowNamed: aString atPosition: aNumber [
397397
{ #category : #adding }
398398
DataFrame >> addRow: aDataSeries [
399399
"Add DataSeries as a new row at the end"
400-
self addRow: aDataSeries asArray named: aDataSeries name
400+
401+
| row |
402+
row := Array new: self columnNames size.
403+
self columnNames withIndexDo: [ :columnName :index |
404+
| value |
405+
value := aDataSeries
406+
at: columnName
407+
ifAbsent: [ aDataSeries atIndex: index ].
408+
row at: index put: value ].
409+
self addRow: row named: aDataSeries name
401410
]
402411

403412
{ #category : #adding }
404413
DataFrame >> addRow: aDataSeries atPosition: aNumber [
405414
"Add DataSeries as a new row at the given position"
406-
self addRow: aDataSeries named: aDataSeries name atPosition: aNumber
415+
416+
| row |
417+
row := Array new: self columnNames size.
418+
self columnNames withIndexDo: [ :columnName :index |
419+
| value |
420+
value := aDataSeries
421+
at: columnName
422+
ifAbsent: [ aDataSeries atIndex: index ].
423+
row at: index put: value ].
424+
self addRow: row named: aDataSeries name atPosition: aNumber
407425
]
408426

409427
{ #category : #adding }
@@ -2161,13 +2179,6 @@ DataFrame >> size [
21612179
^ self numberOfRows
21622180
]
21632181

2164-
{ #category : #sorting }
2165-
DataFrame >> sortBy: columnName [
2166-
"Rearranges the rows of the data frame in ascending order of the values in the column named columnName"
2167-
2168-
self sortBy: columnName using: [ :a :b | a <= b ]
2169-
]
2170-
21712182
{ #category : #sorting }
21722183
DataFrame >> sortBy: columnName using: aBlock [
21732184
"Rearranges the rows of the data frame by applying the given block on the column named columnName"

0 commit comments

Comments
 (0)