Notebook
<table><thead><tr><th> </th><th>siuba </th><th>dplython </th><th>pandas </th></tr></thead><tbody><tr><td>Column operations are pandas Series methods </td><td>✅ </td><td>✅ </td><td>✅ </td></tr><tr><td>Table verbs supports user defined functions </td><td>✅ </td><td>✅ </td><td>✅ </td></tr><tr><td>pipe syntax (`>>`) </td><td>✅ </td><td>✅ </td><td>❌ </td></tr><tr><td>concise, lazy expressions (`_.a + _.b`) </td><td>✅ </td><td>✅ </td><td>❌ </td></tr><tr><td>No more reset_index </td><td>✅ </td><td>✅ </td><td>❌ </td></tr><tr><td>unified API over (un)grouped data </td><td>✅ </td><td>✅ </td><td>❌ </td></tr><tr><td>generate fast grouped operations </td><td>✅ </td><td>❌ </td><td>✅ </td></tr><tr><td><br>generate SQL queries </td><td>✅ </td><td>❌ </td><td>❌ </td></tr><tr><td>Abstract syntax trees for <br>transforming operations</td><td>✅ </td><td>❌ </td><td>❌ </td></tr><tr><td>handles nested data </td><td>✅ </td><td>❌ </td><td>⚠️ </td></tr></tbody></table>
<table class="table-align-left docutils align-default"> <tr> <th>grouped?</th> <th>siuba</th> <th>pandas</th> </tr> <tr> <td> yes </td> <td>
mutate(mtcars,
  res = _.hp - _.hp.mean()
)
</td> <td>
mtcars.assign(
  res = lambda d: d.hp - d.hp.mean()
)
</td> </tr> <tr> <td> no </td> <td>
mutate(g_cyl,
  res = _.hp - _.hp.mean()
)
</td> <td>
mtcars.assign(
  res = mtcars.hp - g_cyl.hp.transform("mean")
)
</td> </tr> </table>