{"action":"created","issue":{"url":"https://api.github.com/repos/pydata/pandas/issues/9239","labels_url":"https://api.github.com/repos/pydata/pandas/issues/9239/labels{/name}","comments_url":"https://api.github.com/repos/pydata/pandas/issues/9239/comments","events_url":"https://api.github.com/repos/pydata/pandas/issues/9239/events","html_url":"https://github.com/pydata/pandas/pull/9239","id":54193793,"number":9239,"title":"API: Add DataFrame.transform method","user":{"login":"TomAugspurger","id":1312546,"avatar_url":"https://avatars.githubusercontent.com/u/1312546?v=3","gravatar_id":"","url":"https://api.github.com/users/TomAugspurger","html_url":"https://github.com/TomAugspurger","followers_url":"https://api.github.com/users/TomAugspurger/followers","following_url":"https://api.github.com/users/TomAugspurger/following{/other_user}","gists_url":"https://api.github.com/users/TomAugspurger/gists{/gist_id}","starred_url":"https://api.github.com/users/TomAugspurger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TomAugspurger/subscriptions","organizations_url":"https://api.github.com/users/TomAugspurger/orgs","repos_url":"https://api.github.com/users/TomAugspurger/repos","events_url":"https://api.github.com/users/TomAugspurger/events{/privacy}","received_events_url":"https://api.github.com/users/TomAugspurger/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/pydata/pandas/labels/API+Design","name":"API Design","color":"AD7FA8"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/pydata/pandas/milestones/25","labels_url":"https://api.github.com/repos/pydata/pandas/milestones/25/labels","id":569113,"number":25,"title":"0.16.0","description":"after 0.15 of course!","creator":{"login":"jreback","id":953992,"avatar_url":"https://avatars.githubusercontent.com/u/953992?v=3","gravatar_id":"","url":"https://api.github.com/users/jreback","html_url":"https://github.com/jreback","followers_url":"https://api.github.com/users/jreback/followers","following_url":"https://api.github.com/users/jreback/following{/other_user}","gists_url":"https://api.github.com/users/jreback/gists{/gist_id}","starred_url":"https://api.github.com/users/jreback/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jreback/subscriptions","organizations_url":"https://api.github.com/users/jreback/orgs","repos_url":"https://api.github.com/users/jreback/repos","events_url":"https://api.github.com/users/jreback/events{/privacy}","received_events_url":"https://api.github.com/users/jreback/received_events","type":"User","site_admin":false},"open_issues":892,"closed_issues":159,"state":"open","created_at":"2014-02-14T03:31:22Z","updated_at":"2015-01-17T12:17:07Z","due_on":"2015-02-28T08:00:00Z","closed_at":null},"comments":13,"created_at":"2015-01-13T13:32:24Z","updated_at":"2015-01-17T14:29:53Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/pydata/pandas/pulls/9239","html_url":"https://github.com/pydata/pandas/pull/9239","diff_url":"https://github.com/pydata/pandas/pull/9239.diff","patch_url":"https://github.com/pydata/pandas/pull/9239.patch"},"body":"Closes https://github.com/pydata/pandas/issues/9229\r\n\r\nsignature: `DataFrame.transform(**kwargs)`\r\n\r\n- the keyword is the name of the new column (existing columns are overwritten if there's a name conflict, as in dplyr)\r\n- the value is either\r\n  - called on self if it's callable. The callable should be a function of 1 argument, the DataFrame being called on.\r\n  - inserted otherwise\r\n\r\n\r\n```python\r\nIn [7]: df.head()\r\nOut[7]: \r\n   sepal_length  sepal_width  petal_length  petal_width species\r\n0           5.1          3.5           1.4          0.2  setosa\r\n1           4.9          3.0           1.4          0.2  setosa\r\n2           4.7          3.2           1.3          0.2  setosa\r\n3           4.6          3.1           1.5          0.2  setosa\r\n4           5.0          3.6           1.4          0.2  setosa\r\n\r\nIn [8]: (df.query('species == \"virginica\"')\r\n           .transform(sepal_ratio=lambda x: x.sepal_length / x.sepal_width)\r\n           .head())\r\nOut[8]: \r\n     sepal_length  sepal_width  petal_length  petal_width    species  \\\r\n100           6.3          3.3           6.0          2.5  virginica   \r\n101           5.8          2.7           5.1          1.9  virginica   \r\n102           7.1          3.0           5.9          2.1  virginica   \r\n103           6.3          2.9           5.6          1.8  virginica   \r\n104           6.5          3.0           5.8          2.2  virginica   \r\n\r\n     sepal_ratio  \r\n100     1.909091  \r\n101     2.148148  \r\n102     2.366667  \r\n103     2.172414  \r\n104     2.166667  \r\n```\r\n\r\nMy question now is\r\n\r\n- How strict should we be on the shape of the `transformed` DataFrame? Should we do any kind of checking on the index or columns?\r\n"},"comment":{"url":"https://api.github.com/repos/pydata/pandas/issues/comments/70368969","html_url":"https://github.com/pydata/pandas/pull/9239#issuecomment-70368969","issue_url":"https://api.github.com/repos/pydata/pandas/issues/9239","id":70368969,"user":{"login":"TomAugspurger","id":1312546,"avatar_url":"https://avatars.githubusercontent.com/u/1312546?v=3","gravatar_id":"","url":"https://api.github.com/users/TomAugspurger","html_url":"https://github.com/TomAugspurger","followers_url":"https://api.github.com/users/TomAugspurger/followers","following_url":"https://api.github.com/users/TomAugspurger/following{/other_user}","gists_url":"https://api.github.com/users/TomAugspurger/gists{/gist_id}","starred_url":"https://api.github.com/users/TomAugspurger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TomAugspurger/subscriptions","organizations_url":"https://api.github.com/users/TomAugspurger/orgs","repos_url":"https://api.github.com/users/TomAugspurger/repos","events_url":"https://api.github.com/users/TomAugspurger/events{/privacy}","received_events_url":"https://api.github.com/users/TomAugspurger/received_events","type":"User","site_admin":false},"created_at":"2015-01-17T14:29:53Z","updated_at":"2015-01-17T14:29:53Z","body":"Updated with some docs and handling multiple assigns. I wasn't sure about the best place for the docs so I threw it in `basics.rst`. I still need to build them to make sure everything looks good.\r\n\r\nI am worried about people hitting subtle bugs with assigning multiple columns in one `assign` since the order won't be preserved. I've tried to document that."}}