{"action":"created","comment":{"url":"https://api.github.com/repos/pydata/pandas/pulls/comments/55762839","id":55762839,"diff_hunk":"@@ -434,12 +437,41 @@ def crosstab(index, columns, values=None, rownames=None, colnames=None,\n     data.update(zip(rownames, index))\n     data.update(zip(colnames, columns))\n \n+    if values is None and aggfunc is not None:\n+        raise ValueError(\"`aggfunc` cannot be used with `values`.\")\n+\n+    if normalize is not None and (aggfunc is not None or values is not None):\n+        error = \"`normalize` cannot be combined with `values` or `aggfunc`\"\n+        raise ValueError(error)\n+\n     if values is None:\n         df = DataFrame(data)\n         df['__dummy__'] = 0\n         table = df.pivot_table('__dummy__', index=rownames, columns=colnames,\n                                aggfunc=len, margins=margins, dropna=dropna)\n-        return table.fillna(0).astype(np.int64)\n+\n+        if normalize is not None:\n+            if normalize == 'all':\n+                table = table / table.sum(axis=1).sum(axis=0)\n+\n+            elif normalize == 'rows':\n+                table = table.apply(lambda x: x / x.sum(), axis=1)","path":"pandas/tools/pivot.py","position":42,"original_position":42,"commit_id":"2110e559bdb47384e6ce00b4264163fbb6ed45ec","original_commit_id":"2110e559bdb47384e6ce00b4264163fbb6ed45ec","user":{"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},"body":"in any event this is just: ``table/x.sum(1)``. we almost *never* actually want to use ``.apply``","created_at":"2016-03-10T22:43:57Z","updated_at":"2016-03-10T22:43:57Z","html_url":"https://github.com/pydata/pandas/pull/12578#discussion_r55762839","pull_request_url":"https://api.github.com/repos/pydata/pandas/pulls/12578","_links":{"self":{"href":"https://api.github.com/repos/pydata/pandas/pulls/comments/55762839"},"html":{"href":"https://github.com/pydata/pandas/pull/12578#discussion_r55762839"},"pull_request":{"href":"https://api.github.com/repos/pydata/pandas/pulls/12578"}}},"pull_request":{"url":"https://api.github.com/repos/pydata/pandas/pulls/12578","id":62303140,"html_url":"https://github.com/pydata/pandas/pull/12578","diff_url":"https://github.com/pydata/pandas/pull/12578.diff","patch_url":"https://github.com/pydata/pandas/pull/12578.patch","issue_url":"https://api.github.com/repos/pydata/pandas/issues/12578","number":12578,"state":"open","locked":false,"title":"Add normalization to crosstab","user":{"login":"nickeubank","id":9683693,"avatar_url":"https://avatars.githubusercontent.com/u/9683693?v=3","gravatar_id":"","url":"https://api.github.com/users/nickeubank","html_url":"https://github.com/nickeubank","followers_url":"https://api.github.com/users/nickeubank/followers","following_url":"https://api.github.com/users/nickeubank/following{/other_user}","gists_url":"https://api.github.com/users/nickeubank/gists{/gist_id}","starred_url":"https://api.github.com/users/nickeubank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickeubank/subscriptions","organizations_url":"https://api.github.com/users/nickeubank/orgs","repos_url":"https://api.github.com/users/nickeubank/repos","events_url":"https://api.github.com/users/nickeubank/events{/privacy}","received_events_url":"https://api.github.com/users/nickeubank/received_events","type":"User","site_admin":false},"body":"Closes #12569\r\n\r\nNote does NOT address #12577","created_at":"2016-03-09T21:58:21Z","updated_at":"2016-03-10T22:43:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"59a91fea3ea2eb5f495bba59502892735e67e13d","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/pydata/pandas/pulls/12578/commits","review_comments_url":"https://api.github.com/repos/pydata/pandas/pulls/12578/comments","review_comment_url":"https://api.github.com/repos/pydata/pandas/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pydata/pandas/issues/12578/comments","statuses_url":"https://api.github.com/repos/pydata/pandas/statuses/2110e559bdb47384e6ce00b4264163fbb6ed45ec","head":{"label":"nickeubank:improve_crosstab","ref":"improve_crosstab","sha":"2110e559bdb47384e6ce00b4264163fbb6ed45ec","user":{"login":"nickeubank","id":9683693,"avatar_url":"https://avatars.githubusercontent.com/u/9683693?v=3","gravatar_id":"","url":"https://api.github.com/users/nickeubank","html_url":"https://github.com/nickeubank","followers_url":"https://api.github.com/users/nickeubank/followers","following_url":"https://api.github.com/users/nickeubank/following{/other_user}","gists_url":"https://api.github.com/users/nickeubank/gists{/gist_id}","starred_url":"https://api.github.com/users/nickeubank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickeubank/subscriptions","organizations_url":"https://api.github.com/users/nickeubank/orgs","repos_url":"https://api.github.com/users/nickeubank/repos","events_url":"https://api.github.com/users/nickeubank/events{/privacy}","received_events_url":"https://api.github.com/users/nickeubank/received_events","type":"User","site_admin":false},"repo":{"id":30383936,"name":"pandas","full_name":"nickeubank/pandas","owner":{"login":"nickeubank","id":9683693,"avatar_url":"https://avatars.githubusercontent.com/u/9683693?v=3","gravatar_id":"","url":"https://api.github.com/users/nickeubank","html_url":"https://github.com/nickeubank","followers_url":"https://api.github.com/users/nickeubank/followers","following_url":"https://api.github.com/users/nickeubank/following{/other_user}","gists_url":"https://api.github.com/users/nickeubank/gists{/gist_id}","starred_url":"https://api.github.com/users/nickeubank/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickeubank/subscriptions","organizations_url":"https://api.github.com/users/nickeubank/orgs","repos_url":"https://api.github.com/users/nickeubank/repos","events_url":"https://api.github.com/users/nickeubank/events{/privacy}","received_events_url":"https://api.github.com/users/nickeubank/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nickeubank/pandas","description":"Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more","fork":true,"url":"https://api.github.com/repos/nickeubank/pandas","forks_url":"https://api.github.com/repos/nickeubank/pandas/forks","keys_url":"https://api.github.com/repos/nickeubank/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nickeubank/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nickeubank/pandas/teams","hooks_url":"https://api.github.com/repos/nickeubank/pandas/hooks","issue_events_url":"https://api.github.com/repos/nickeubank/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/nickeubank/pandas/events","assignees_url":"https://api.github.com/repos/nickeubank/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/nickeubank/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/nickeubank/pandas/tags","blobs_url":"https://api.github.com/repos/nickeubank/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nickeubank/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nickeubank/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/nickeubank/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nickeubank/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/nickeubank/pandas/languages","stargazers_url":"https://api.github.com/repos/nickeubank/pandas/stargazers","contributors_url":"https://api.github.com/repos/nickeubank/pandas/contributors","subscribers_url":"https://api.github.com/repos/nickeubank/pandas/subscribers","subscription_url":"https://api.github.com/repos/nickeubank/pandas/subscription","commits_url":"https://api.github.com/repos/nickeubank/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/nickeubank/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/nickeubank/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/nickeubank/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/nickeubank/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/nickeubank/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nickeubank/pandas/merges","archive_url":"https://api.github.com/repos/nickeubank/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nickeubank/pandas/downloads","issues_url":"https://api.github.com/repos/nickeubank/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/nickeubank/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/nickeubank/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/nickeubank/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nickeubank/pandas/labels{/name}","releases_url":"https://api.github.com/repos/nickeubank/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/nickeubank/pandas/deployments","created_at":"2015-02-05T23:20:06Z","updated_at":"2016-02-19T04:30:52Z","pushed_at":"2016-03-10T01:52:40Z","git_url":"git://github.com/nickeubank/pandas.git","ssh_url":"git@github.com:nickeubank/pandas.git","clone_url":"https://github.com/nickeubank/pandas.git","svn_url":"https://github.com/nickeubank/pandas","homepage":"http://pandas.pydata.org","size":76063,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pydata:master","ref":"master","sha":"e5ed87b33ab6cd9dade10df945bc5d7452310b7d","user":{"login":"pydata","id":1284191,"avatar_url":"https://avatars.githubusercontent.com/u/1284191?v=3","gravatar_id":"","url":"https://api.github.com/users/pydata","html_url":"https://github.com/pydata","followers_url":"https://api.github.com/users/pydata/followers","following_url":"https://api.github.com/users/pydata/following{/other_user}","gists_url":"https://api.github.com/users/pydata/gists{/gist_id}","starred_url":"https://api.github.com/users/pydata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pydata/subscriptions","organizations_url":"https://api.github.com/users/pydata/orgs","repos_url":"https://api.github.com/users/pydata/repos","events_url":"https://api.github.com/users/pydata/events{/privacy}","received_events_url":"https://api.github.com/users/pydata/received_events","type":"Organization","site_admin":false},"repo":{"id":858127,"name":"pandas","full_name":"pydata/pandas","owner":{"login":"pydata","id":1284191,"avatar_url":"https://avatars.githubusercontent.com/u/1284191?v=3","gravatar_id":"","url":"https://api.github.com/users/pydata","html_url":"https://github.com/pydata","followers_url":"https://api.github.com/users/pydata/followers","following_url":"https://api.github.com/users/pydata/following{/other_user}","gists_url":"https://api.github.com/users/pydata/gists{/gist_id}","starred_url":"https://api.github.com/users/pydata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pydata/subscriptions","organizations_url":"https://api.github.com/users/pydata/orgs","repos_url":"https://api.github.com/users/pydata/repos","events_url":"https://api.github.com/users/pydata/events{/privacy}","received_events_url":"https://api.github.com/users/pydata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pydata/pandas","description":"Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more","fork":false,"url":"https://api.github.com/repos/pydata/pandas","forks_url":"https://api.github.com/repos/pydata/pandas/forks","keys_url":"https://api.github.com/repos/pydata/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pydata/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pydata/pandas/teams","hooks_url":"https://api.github.com/repos/pydata/pandas/hooks","issue_events_url":"https://api.github.com/repos/pydata/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/pydata/pandas/events","assignees_url":"https://api.github.com/repos/pydata/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/pydata/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/pydata/pandas/tags","blobs_url":"https://api.github.com/repos/pydata/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pydata/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pydata/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/pydata/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pydata/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/pydata/pandas/languages","stargazers_url":"https://api.github.com/repos/pydata/pandas/stargazers","contributors_url":"https://api.github.com/repos/pydata/pandas/contributors","subscribers_url":"https://api.github.com/repos/pydata/pandas/subscribers","subscription_url":"https://api.github.com/repos/pydata/pandas/subscription","commits_url":"https://api.github.com/repos/pydata/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/pydata/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/pydata/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/pydata/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/pydata/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/pydata/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pydata/pandas/merges","archive_url":"https://api.github.com/repos/pydata/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pydata/pandas/downloads","issues_url":"https://api.github.com/repos/pydata/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/pydata/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/pydata/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/pydata/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pydata/pandas/labels{/name}","releases_url":"https://api.github.com/repos/pydata/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/pydata/pandas/deployments","created_at":"2010-08-24T01:37:33Z","updated_at":"2016-03-10T20:27:06Z","pushed_at":"2016-03-10T22:15:34Z","git_url":"git://github.com/pydata/pandas.git","ssh_url":"git@github.com:pydata/pandas.git","clone_url":"https://github.com/pydata/pandas.git","svn_url":"https://github.com/pydata/pandas","homepage":"http://pandas.pydata.org","size":137842,"stargazers_count":5867,"watchers_count":5867,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2362,"mirror_url":null,"open_issues_count":1671,"forks":2362,"open_issues":1671,"watchers":5867,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pydata/pandas/pulls/12578"},"html":{"href":"https://github.com/pydata/pandas/pull/12578"},"issue":{"href":"https://api.github.com/repos/pydata/pandas/issues/12578"},"comments":{"href":"https://api.github.com/repos/pydata/pandas/issues/12578/comments"},"review_comments":{"href":"https://api.github.com/repos/pydata/pandas/pulls/12578/comments"},"review_comment":{"href":"https://api.github.com/repos/pydata/pandas/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pydata/pandas/pulls/12578/commits"},"statuses":{"href":"https://api.github.com/repos/pydata/pandas/statuses/2110e559bdb47384e6ce00b4264163fbb6ed45ec"}}}}