{"action":"created","comment":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/91872084","pull_request_review_id":12381041,"id":91872084,"diff_hunk":"@@ -94,6 +99,61 @@ cdef class {{name}}Vector:\n \n {{endfor}}\n \n+cdef class StringVector:\n+","path":"pandas/src/hashtable_class_helper.pxi.in","position":97,"original_position":97,"commit_id":"0102c3d67a8ce5c9a30947ff6c79125876974f86","original_commit_id":"0102c3d67a8ce5c9a30947ff6c79125876974f86","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":"not actually using this so add comment /\r\ndelete","created_at":"2016-12-12T01:11:19Z","updated_at":"2016-12-12T01:14:02Z","html_url":"https://github.com/pandas-dev/pandas/pull/14859#discussion_r91872084","pull_request_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859","_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/91872084"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/14859#discussion_r91872084"},"pull_request":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859"}}},"pull_request":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859","id":97480671,"html_url":"https://github.com/pandas-dev/pandas/pull/14859","diff_url":"https://github.com/pandas-dev/pandas/pull/14859.diff","patch_url":"https://github.com/pandas-dev/pandas/pull/14859.patch","issue_url":"https://api.github.com/repos/pandas-dev/pandas/issues/14859","number":14859,"state":"open","locked":false,"title":"PERF: use StringHasTable for strings","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":"xref #13745 \r\n\r\nprovides a modest speedup for all string hashing. The key thing is, it will release the GIL on more operations where this is possible (mainly ``factorize``).\r\n\r\ncan be easily extended to ``.value_counts()`` and ``.duplicated()`` (for strings), new issue for that one\r\n\r\n```\r\nIn [9]: np.random.seed(1234)\r\n\r\nIn [10]: strings = tm.makeStringIndex(1000000)\r\n\r\nIn [11]: def f():\r\n    ...:     for i in range(2):\r\n    ...:         pd.factorize(strings)\r\n    ...:         \r\n\r\nIn [12]: @tm.test_parallel(num_threads=2)\r\n    ...: def g():\r\n    ...:     pd.factorize(strings)\r\n    ...:     \r\n\r\nIn [13]: %timeit f()\r\n1 loop, best of 3: 685 ms per loop\r\n\r\nIn [14]: %timeit g()\r\n1 loop, best of 3: 446 ms per loop\r\n\r\nIn [15]: strings = strings.take(np.random.randint(0,1000,size=len(strings)))\r\n\r\nIn [16]: strings.nunique()\r\nOut[16]: 1000\r\n\r\nIn [17]: %timeit f()\r\n1 loop, best of 3: 222 ms per loop\r\n\r\nIn [18]: %timeit g()\r\n10 loops, best of 3: 190 ms per loop\r\n```","created_at":"2016-12-12T00:31:17Z","updated_at":"2016-12-12T01:14:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"59d9f7f438f3ce6f0e72da4a5b82483c36e15f5c","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/pandas-dev/pandas/milestones/39","html_url":"https://github.com/pandas-dev/pandas/milestone/39","labels_url":"https://api.github.com/repos/pandas-dev/pandas/milestones/39/labels","id":1570595,"number":39,"title":"0.20.0","description":"after 0.19.x series","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":153,"closed_issues":78,"state":"open","created_at":"2016-02-08T15:30:21Z","updated_at":"2016-12-12T00:31:17Z","due_on":"2017-01-31T00:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859/commits","review_comments_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859/comments","review_comment_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pandas-dev/pandas/issues/14859/comments","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/0102c3d67a8ce5c9a30947ff6c79125876974f86","head":{"label":"jreback:string","ref":"string","sha":"0102c3d67a8ce5c9a30947ff6c79125876974f86","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},"repo":{"id":2142250,"name":"pandas","full_name":"jreback/pandas","owner":{"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},"private":false,"html_url":"https://github.com/jreback/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/jreback/pandas","forks_url":"https://api.github.com/repos/jreback/pandas/forks","keys_url":"https://api.github.com/repos/jreback/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jreback/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jreback/pandas/teams","hooks_url":"https://api.github.com/repos/jreback/pandas/hooks","issue_events_url":"https://api.github.com/repos/jreback/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/jreback/pandas/events","assignees_url":"https://api.github.com/repos/jreback/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/jreback/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/jreback/pandas/tags","blobs_url":"https://api.github.com/repos/jreback/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jreback/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jreback/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/jreback/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jreback/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/jreback/pandas/languages","stargazers_url":"https://api.github.com/repos/jreback/pandas/stargazers","contributors_url":"https://api.github.com/repos/jreback/pandas/contributors","subscribers_url":"https://api.github.com/repos/jreback/pandas/subscribers","subscription_url":"https://api.github.com/repos/jreback/pandas/subscription","commits_url":"https://api.github.com/repos/jreback/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/jreback/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/jreback/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/jreback/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/jreback/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/jreback/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jreback/pandas/merges","archive_url":"https://api.github.com/repos/jreback/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jreback/pandas/downloads","issues_url":"https://api.github.com/repos/jreback/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/jreback/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/jreback/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/jreback/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jreback/pandas/labels{/name}","releases_url":"https://api.github.com/repos/jreback/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/jreback/pandas/deployments","created_at":"2011-08-02T12:17:07Z","updated_at":"2016-11-07T23:02:27Z","pushed_at":"2016-12-12T00:31:14Z","git_url":"git://github.com/jreback/pandas.git","ssh_url":"git@github.com:jreback/pandas.git","clone_url":"https://github.com/jreback/pandas.git","svn_url":"https://github.com/jreback/pandas","homepage":"http://pandas.sourceforge.net","size":85587,"stargazers_count":8,"watchers_count":8,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4,"mirror_url":null,"open_issues_count":0,"forks":4,"open_issues":0,"watchers":8,"default_branch":"master"}},"base":{"label":"pandas-dev:master","ref":"master","sha":"0c82abef8bc8fc7419a3b8823229cafd195595ac","user":{"login":"pandas-dev","id":21206976,"avatar_url":"https://avatars.githubusercontent.com/u/21206976?v=3","gravatar_id":"","url":"https://api.github.com/users/pandas-dev","html_url":"https://github.com/pandas-dev","followers_url":"https://api.github.com/users/pandas-dev/followers","following_url":"https://api.github.com/users/pandas-dev/following{/other_user}","gists_url":"https://api.github.com/users/pandas-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/pandas-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pandas-dev/subscriptions","organizations_url":"https://api.github.com/users/pandas-dev/orgs","repos_url":"https://api.github.com/users/pandas-dev/repos","events_url":"https://api.github.com/users/pandas-dev/events{/privacy}","received_events_url":"https://api.github.com/users/pandas-dev/received_events","type":"Organization","site_admin":false},"repo":{"id":858127,"name":"pandas","full_name":"pandas-dev/pandas","owner":{"login":"pandas-dev","id":21206976,"avatar_url":"https://avatars.githubusercontent.com/u/21206976?v=3","gravatar_id":"","url":"https://api.github.com/users/pandas-dev","html_url":"https://github.com/pandas-dev","followers_url":"https://api.github.com/users/pandas-dev/followers","following_url":"https://api.github.com/users/pandas-dev/following{/other_user}","gists_url":"https://api.github.com/users/pandas-dev/gists{/gist_id}","starred_url":"https://api.github.com/users/pandas-dev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pandas-dev/subscriptions","organizations_url":"https://api.github.com/users/pandas-dev/orgs","repos_url":"https://api.github.com/users/pandas-dev/repos","events_url":"https://api.github.com/users/pandas-dev/events{/privacy}","received_events_url":"https://api.github.com/users/pandas-dev/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pandas-dev/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/pandas-dev/pandas","forks_url":"https://api.github.com/repos/pandas-dev/pandas/forks","keys_url":"https://api.github.com/repos/pandas-dev/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pandas-dev/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pandas-dev/pandas/teams","hooks_url":"https://api.github.com/repos/pandas-dev/pandas/hooks","issue_events_url":"https://api.github.com/repos/pandas-dev/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/pandas-dev/pandas/events","assignees_url":"https://api.github.com/repos/pandas-dev/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/pandas-dev/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/pandas-dev/pandas/tags","blobs_url":"https://api.github.com/repos/pandas-dev/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pandas-dev/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pandas-dev/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/pandas-dev/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/pandas-dev/pandas/languages","stargazers_url":"https://api.github.com/repos/pandas-dev/pandas/stargazers","contributors_url":"https://api.github.com/repos/pandas-dev/pandas/contributors","subscribers_url":"https://api.github.com/repos/pandas-dev/pandas/subscribers","subscription_url":"https://api.github.com/repos/pandas-dev/pandas/subscription","commits_url":"https://api.github.com/repos/pandas-dev/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/pandas-dev/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/pandas-dev/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/pandas-dev/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/pandas-dev/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/pandas-dev/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pandas-dev/pandas/merges","archive_url":"https://api.github.com/repos/pandas-dev/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pandas-dev/pandas/downloads","issues_url":"https://api.github.com/repos/pandas-dev/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/pandas-dev/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/pandas-dev/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/pandas-dev/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pandas-dev/pandas/labels{/name}","releases_url":"https://api.github.com/repos/pandas-dev/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/pandas-dev/pandas/deployments","created_at":"2010-08-24T01:37:33Z","updated_at":"2016-12-11T21:36:40Z","pushed_at":"2016-12-12T00:31:17Z","git_url":"git://github.com/pandas-dev/pandas.git","ssh_url":"git@github.com:pandas-dev/pandas.git","clone_url":"https://github.com/pandas-dev/pandas.git","svn_url":"https://github.com/pandas-dev/pandas","homepage":"http://pandas.pydata.org","size":156075,"stargazers_count":7573,"watchers_count":7573,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":3144,"mirror_url":null,"open_issues_count":1878,"forks":3144,"open_issues":1878,"watchers":7573,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/14859"},"issue":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/14859"},"comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/14859/comments"},"review_comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859/comments"},"review_comment":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/14859/commits"},"statuses":{"href":"https://api.github.com/repos/pandas-dev/pandas/statuses/0102c3d67a8ce5c9a30947ff6c79125876974f86"}}}}
{"actor":{"display_login":"jreback"}}