{"action":"created","comment":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/137933124","pull_request_review_id":61669088,"id":137933124,"diff_hunk":"@@ -792,6 +815,10 @@ def _get_merge_keys(self):\n         is_rkey = lambda x: isinstance(\n             x, (np.ndarray, Series)) and len(x) == len(right)\n \n+        def get_key_vals(df, key):","path":"pandas/core/reshape/merge.py","position":59,"original_position":59,"commit_id":"da94fdb51c4ae206d1a527d7acb3bf5ee0e75534","original_commit_id":"da94fdb51c4ae206d1a527d7acb3bf5ee0e75534","user":{"login":"gfyoung","id":9273653,"avatar_url":"https://avatars0.githubusercontent.com/u/9273653?v=4","gravatar_id":"","url":"https://api.github.com/users/gfyoung","html_url":"https://github.com/gfyoung","followers_url":"https://api.github.com/users/gfyoung/followers","following_url":"https://api.github.com/users/gfyoung/following{/other_user}","gists_url":"https://api.github.com/users/gfyoung/gists{/gist_id}","starred_url":"https://api.github.com/users/gfyoung/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gfyoung/subscriptions","organizations_url":"https://api.github.com/users/gfyoung/orgs","repos_url":"https://api.github.com/users/gfyoung/repos","events_url":"https://api.github.com/users/gfyoung/events{/privacy}","received_events_url":"https://api.github.com/users/gfyoung/received_events","type":"User","site_admin":false},"body":"Add doc-string for this.","created_at":"2017-09-09T19:14:39Z","updated_at":"2017-09-09T19:14:39Z","html_url":"https://github.com/pandas-dev/pandas/pull/17484#discussion_r137933124","pull_request_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/comments/137933124"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/17484#discussion_r137933124"},"pull_request":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484"}}},"pull_request":{"url":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484","id":140172117,"html_url":"https://github.com/pandas-dev/pandas/pull/17484","diff_url":"https://github.com/pandas-dev/pandas/pull/17484.diff","patch_url":"https://github.com/pandas-dev/pandas/pull/17484.patch","issue_url":"https://api.github.com/repos/pandas-dev/pandas/issues/17484","number":17484,"state":"open","locked":false,"title":"Support merging DataFrames on a combo of columns and index levels (GH 14355)","user":{"login":"jmmease","id":15064365,"avatar_url":"https://avatars1.githubusercontent.com/u/15064365?v=4","gravatar_id":"","url":"https://api.github.com/users/jmmease","html_url":"https://github.com/jmmease","followers_url":"https://api.github.com/users/jmmease/followers","following_url":"https://api.github.com/users/jmmease/following{/other_user}","gists_url":"https://api.github.com/users/jmmease/gists{/gist_id}","starred_url":"https://api.github.com/users/jmmease/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmmease/subscriptions","organizations_url":"https://api.github.com/users/jmmease/orgs","repos_url":"https://api.github.com/users/jmmease/repos","events_url":"https://api.github.com/users/jmmease/events{/privacy}","received_events_url":"https://api.github.com/users/jmmease/received_events","type":"User","site_admin":false},"body":"This PR implements the changes proposed and discussed with @jorisvandenbossche @shoyer @TomAugspurger @jreback in #14355.\r\n\r\nThese changes allow the `on`, `left_on`, and `right_on` parameters of `DataFrame.merge` to accept a combination of column names and index level names. Any common index levels that are merged on are preserved as index levels in the resulting DataFrame, while all other index levels are removed.\r\n\r\nIn the case of a conflict, the column takes precedence and an ambiguity `FutureWarning` is raised.\r\n\r\n- [x] closes #14355\r\n- [x] tests added / passed\r\n- [x] passes `git diff upstream/master -u -- \"*.py\" | flake8 --diff`\r\n- [x] documentation updated\r\n- [x] whatsnew entry\r\n\r\n**Note:** The new `df._get_column_or_level_values` method introduced in this PR is the same method introduced in #17361 to support sorting DataFrames on a combination of columns and index levels. I will keep this method in sync between the two PRs during the review process.\r\n","created_at":"2017-09-09T14:42:49Z","updated_at":"2017-09-09T19:14:39Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e3ffab1bb38abf3824d4971a2ac7017d230f483d","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484/commits","review_comments_url":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484/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/17484/comments","statuses_url":"https://api.github.com/repos/pandas-dev/pandas/statuses/da94fdb51c4ae206d1a527d7acb3bf5ee0e75534","head":{"label":"jmmease:enh_14355","ref":"enh_14355","sha":"da94fdb51c4ae206d1a527d7acb3bf5ee0e75534","user":{"login":"jmmease","id":15064365,"avatar_url":"https://avatars1.githubusercontent.com/u/15064365?v=4","gravatar_id":"","url":"https://api.github.com/users/jmmease","html_url":"https://github.com/jmmease","followers_url":"https://api.github.com/users/jmmease/followers","following_url":"https://api.github.com/users/jmmease/following{/other_user}","gists_url":"https://api.github.com/users/jmmease/gists{/gist_id}","starred_url":"https://api.github.com/users/jmmease/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmmease/subscriptions","organizations_url":"https://api.github.com/users/jmmease/orgs","repos_url":"https://api.github.com/users/jmmease/repos","events_url":"https://api.github.com/users/jmmease/events{/privacy}","received_events_url":"https://api.github.com/users/jmmease/received_events","type":"User","site_admin":false},"repo":{"id":69743295,"name":"pandas","full_name":"jmmease/pandas","owner":{"login":"jmmease","id":15064365,"avatar_url":"https://avatars1.githubusercontent.com/u/15064365?v=4","gravatar_id":"","url":"https://api.github.com/users/jmmease","html_url":"https://github.com/jmmease","followers_url":"https://api.github.com/users/jmmease/followers","following_url":"https://api.github.com/users/jmmease/following{/other_user}","gists_url":"https://api.github.com/users/jmmease/gists{/gist_id}","starred_url":"https://api.github.com/users/jmmease/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmmease/subscriptions","organizations_url":"https://api.github.com/users/jmmease/orgs","repos_url":"https://api.github.com/users/jmmease/repos","events_url":"https://api.github.com/users/jmmease/events{/privacy}","received_events_url":"https://api.github.com/users/jmmease/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jmmease/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/jmmease/pandas","forks_url":"https://api.github.com/repos/jmmease/pandas/forks","keys_url":"https://api.github.com/repos/jmmease/pandas/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jmmease/pandas/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jmmease/pandas/teams","hooks_url":"https://api.github.com/repos/jmmease/pandas/hooks","issue_events_url":"https://api.github.com/repos/jmmease/pandas/issues/events{/number}","events_url":"https://api.github.com/repos/jmmease/pandas/events","assignees_url":"https://api.github.com/repos/jmmease/pandas/assignees{/user}","branches_url":"https://api.github.com/repos/jmmease/pandas/branches{/branch}","tags_url":"https://api.github.com/repos/jmmease/pandas/tags","blobs_url":"https://api.github.com/repos/jmmease/pandas/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jmmease/pandas/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jmmease/pandas/git/refs{/sha}","trees_url":"https://api.github.com/repos/jmmease/pandas/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jmmease/pandas/statuses/{sha}","languages_url":"https://api.github.com/repos/jmmease/pandas/languages","stargazers_url":"https://api.github.com/repos/jmmease/pandas/stargazers","contributors_url":"https://api.github.com/repos/jmmease/pandas/contributors","subscribers_url":"https://api.github.com/repos/jmmease/pandas/subscribers","subscription_url":"https://api.github.com/repos/jmmease/pandas/subscription","commits_url":"https://api.github.com/repos/jmmease/pandas/commits{/sha}","git_commits_url":"https://api.github.com/repos/jmmease/pandas/git/commits{/sha}","comments_url":"https://api.github.com/repos/jmmease/pandas/comments{/number}","issue_comment_url":"https://api.github.com/repos/jmmease/pandas/issues/comments{/number}","contents_url":"https://api.github.com/repos/jmmease/pandas/contents/{+path}","compare_url":"https://api.github.com/repos/jmmease/pandas/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jmmease/pandas/merges","archive_url":"https://api.github.com/repos/jmmease/pandas/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jmmease/pandas/downloads","issues_url":"https://api.github.com/repos/jmmease/pandas/issues{/number}","pulls_url":"https://api.github.com/repos/jmmease/pandas/pulls{/number}","milestones_url":"https://api.github.com/repos/jmmease/pandas/milestones{/number}","notifications_url":"https://api.github.com/repos/jmmease/pandas/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jmmease/pandas/labels{/name}","releases_url":"https://api.github.com/repos/jmmease/pandas/releases{/id}","deployments_url":"https://api.github.com/repos/jmmease/pandas/deployments","created_at":"2016-10-01T14:30:07Z","updated_at":"2016-10-01T14:30:13Z","pushed_at":"2017-09-09T14:27:42Z","git_url":"git://github.com/jmmease/pandas.git","ssh_url":"git@github.com:jmmease/pandas.git","clone_url":"https://github.com/jmmease/pandas.git","svn_url":"https://github.com/jmmease/pandas","homepage":"http://pandas.pydata.org","size":103624,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"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":"pandas-dev:master","ref":"master","sha":"d6df8ea99f2574480e934aae01a1e142f935145e","user":{"login":"pandas-dev","id":21206976,"avatar_url":"https://avatars2.githubusercontent.com/u/21206976?v=4","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://avatars2.githubusercontent.com/u/21206976?v=4","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":"2017-09-09T18:50:23Z","pushed_at":"2017-09-09T19:09:09Z","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":104310,"stargazers_count":10777,"watchers_count":10777,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":4290,"mirror_url":null,"open_issues_count":2139,"forks":4290,"open_issues":2139,"watchers":10777,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484"},"html":{"href":"https://github.com/pandas-dev/pandas/pull/17484"},"issue":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/17484"},"comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/issues/17484/comments"},"review_comments":{"href":"https://api.github.com/repos/pandas-dev/pandas/pulls/17484/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/17484/commits"},"statuses":{"href":"https://api.github.com/repos/pandas-dev/pandas/statuses/da94fdb51c4ae206d1a527d7acb3bf5ee0e75534"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"gfyoung"}}