@@ -15,20 +15,40 @@ def test_duckDB(self):
1515 conn .register ("airports" , df_airports )
1616 conn .close ()
1717
18+ from davidkhala .data .frame .pandas import upsert
1819class SyntaxTestCase (unittest .TestCase ):
20+
1921 def test_upsert (self ):
20- from davidkhala .data .frame .pandas import upsert
21- prim_key = 'id'
22+
2223 df = pandas .DataFrame ({
23- prim_key : [1 , 2 ],
24+ 'id' : [1 , 2 ],
2425 'name' : ['Alice' , 'Bob' ],
2526 'score' : [85 , 90 ]
26- }).set_index (prim_key )
27+ })
28+ prim_key = 'id'
29+ df = df .set_index (prim_key )
2730 new_record = {'name' : 'Charlie' , 'score' : 95 , prim_key :2 }
28- upsert (df , prim_key , new_record )
31+ upsert (df , prim_key , record = new_record )
2932
3033 self .assertEqual (95 , df .at [2 , 'score' ])
31-
34+ def test_upsert2 (self ):
35+ df = pandas .DataFrame ([
36+ {'School' : 'Oxford' , 'Country' : 'UK' , 'Students' : 1000 },
37+ {'School' : 'Harvard' , 'Country' : 'US' , 'Students' : 1500 }
38+ ]).set_index (['School' , 'Country' ])
39+ new_students = 2000
40+ record = {'School' : 'Oxford' , 'Country' : 'UK' , 'Students' : new_students }
41+ df = upsert (df , 'School' , 'Country' , record = record )
42+ self .assertEqual (new_students , df .loc [('Oxford' , 'UK' )].Students )
43+ def test_upsert3 (self ):
44+ df = pandas .DataFrame ([
45+ {'School' : 'Oxford' , 'Country' : 'UK' , 'Students' : 1000 },
46+ {'School' : 'Harvard' , 'Country' : 'US' , 'Students' : 1500 }
47+ ])
48+ new_students = 2000
49+ record = {'School' : 'Oxford' , 'Country' : 'UK' , 'Students' : new_students }
50+ df = upsert (df , 'School' , 'Country' , record = record )
51+ self .assertEqual (new_students , df [(df ['School' ] == 'Oxford' ) & (df ['Country' ] == 'UK' )].iloc [0 ].Students )
3252
3353
3454
0 commit comments