如何将一个 df 的列条目匹配到另一个 df;如果它们相同,则将另一列的条目从第一个 df 附加到第二个 df?
How do I match a column entry from one df to a different df; and if they're the same, append another column's entry from the first df to the 2nd df?
上下文:
我有两个具有以下设置的数据框:
df1 看起来像这样...并持续约 3500 行:
| id1 | id2 |
|:----|------:|
| a | name1 |
| b | name2 |
| c | name3 |
| d | name4 |
| e | name5 |
| f | name6 |
df2 看起来像这样...并持续约 4000 行和约 8 列
| id1 | ranktrial1 | ranktrial2 | ...
|:----|-------------:|-------------:| ...
| a | rank1 |rank1 | ...
| b | rank2 |rank2 | ...
| c | rank3 |rank3 | ...
| d | rank4 |rank4 | ...
| e | rank5 |rank5 | ...
| f | rank6 |rank6 | ...
注意1:有些id1没有id2。这意味着它们在映射时将是 NaN;每当我到达那一步时,我就会放弃它们。我不知道这是否相关,但我只是想添加它以防万一。
问题:
我需要append/join/place(这里不知道正确的行话)将相应的 id2 名称添加到第二个数据帧,当且仅当 df2 的 id1 条目 == id1 条目。我该怎么做呢?
所需的数据框如下所示:
| id1 | id2 | ranktrial1 | tranktrail2 | ...
|:----|------:|-------------:|-------------:| ...
| a | name1 | rank1 | rank1 | ...
| b | name2 | rank2 | rank2 | ...
| c | name3 | rank3 | rank3 | ...
| d | name4 | rank4 | rank4 | ...
| e | name5 | rank5 | rank5 | ...
| f | name6 | rank6 | rank6 | ...
我觉得这可能真的很简单,而且我有点傻,因为我是一个 Python 新手。但是,我无法使用类似问题的回答来实现我的目标。不过这很可能是我的错 :p
在此先感谢您的帮助!
edits 更改了 4000 个条目 --> 4000 行。 LIkewise 3500 个条目
考虑到您之后要删除缺失的位,这是一个内部联接,可以使用 merge
完成。默认情况下,merge
使用所有常用命名的列。在这种情况下,唯一常用命名的列是 id1
。此外,how='inner'
si 也是默认值。
df1.merge(df2)
id1 id2 ranktrial1 tranktrail2
0 a name1 rank1 rank1
1 b name2 rank2 rank2
2 c name3 rank3 rank3
3 d name4 rank4 rank4
4 e name5 rank5 rank5
5 f name6 rank6 rank6
你可以用
更明确
df1.merge(df2, how='inner', on='id1')
上下文:
我有两个具有以下设置的数据框:
df1 看起来像这样...并持续约 3500 行:
| id1 | id2 |
|:----|------:|
| a | name1 |
| b | name2 |
| c | name3 |
| d | name4 |
| e | name5 |
| f | name6 |
df2 看起来像这样...并持续约 4000 行和约 8 列
| id1 | ranktrial1 | ranktrial2 | ...
|:----|-------------:|-------------:| ...
| a | rank1 |rank1 | ...
| b | rank2 |rank2 | ...
| c | rank3 |rank3 | ...
| d | rank4 |rank4 | ...
| e | rank5 |rank5 | ...
| f | rank6 |rank6 | ...
注意1:有些id1没有id2。这意味着它们在映射时将是 NaN;每当我到达那一步时,我就会放弃它们。我不知道这是否相关,但我只是想添加它以防万一。
问题:
我需要append/join/place(这里不知道正确的行话)将相应的 id2 名称添加到第二个数据帧,当且仅当 df2 的 id1 条目 == id1 条目。我该怎么做呢?
所需的数据框如下所示:
| id1 | id2 | ranktrial1 | tranktrail2 | ...
|:----|------:|-------------:|-------------:| ...
| a | name1 | rank1 | rank1 | ...
| b | name2 | rank2 | rank2 | ...
| c | name3 | rank3 | rank3 | ...
| d | name4 | rank4 | rank4 | ...
| e | name5 | rank5 | rank5 | ...
| f | name6 | rank6 | rank6 | ...
我觉得这可能真的很简单,而且我有点傻,因为我是一个 Python 新手。但是,我无法使用类似问题的回答来实现我的目标。不过这很可能是我的错 :p
在此先感谢您的帮助!
edits 更改了 4000 个条目 --> 4000 行。 LIkewise 3500 个条目
考虑到您之后要删除缺失的位,这是一个内部联接,可以使用 merge
完成。默认情况下,merge
使用所有常用命名的列。在这种情况下,唯一常用命名的列是 id1
。此外,how='inner'
si 也是默认值。
df1.merge(df2)
id1 id2 ranktrial1 tranktrail2
0 a name1 rank1 rank1
1 b name2 rank2 rank2
2 c name3 rank3 rank3
3 d name4 rank4 rank4
4 e name5 rank5 rank5
5 f name6 rank6 rank6
你可以用
更明确df1.merge(df2, how='inner', on='id1')