繁体   English   中英

根据特定的列数据合并两个数据集

[英]Merge two datasets based on specific column data

我有两个大熊猫数据集

旧:

|   alpha |       beta          | zeta        | id       | rand | numb|
| ------  | ------------------  | ------------| ------   | --- -| ----|
|   1     |        LA           |   bev       |  A100    | D    | 100 |
|   1     |        LA           |   malib     |  C150    | Z    | 150 |
|   2     |        NY           |   queens    |  B200    | N    | 200 |
|   2     |        NY           |   queens    |  B200    | N    | 200 |
|   3     |        Chic         |   lincpark  |  E300    | T    | 300 |
|   3     |        NY           |   Bronx     |  F300    | M    | 300 |

新:

|   alpha |       beta          |    zeta        |  id   | numb |
| ------  | ------------------  | ---------------| ------| -----|
|   1     |        LA           |   Hwood        |  Q    | Q400 |
|   2     |        NY           |   queens       |  B    | B200 |
|   3     |        Chic         |   lincpark     |  D    | D300 |

(列和数据没有特别的意义,仅是示例)。

我想以这样的方式合并数据集

  1. 如果old.alpha,old.beta和old.zeta =相应的新列,如果old.id = new.numb,则仅保留旧表中的条目。 (在这种情况下,将保留旧有皇后的第2行,而不是新包含皇后的第2行)

请注意,旧的第3行和第4行是相同的,但我们仍然保留两者。 如果这些行在新行中有2个重复项,则我们将它们视为1-1对应。 如果在第3行的新行上有3个重复项,而在旧行的第4行上有3个重复项,则将2个视为副本(并且我们不添加它们,但是在合并它们时会添加第三个)

  1. 如果old.alpha,old.beta和old.zeta =它们对应的新列,并且如果old.numb包含在new.numb中,则仅保留旧表中的条目。 (在这种情况下,将保留旧版lincpark的第5行,而不是新版lincpark的第3行,因为new.numb中包含300)

  2. 否则,将新数据添加为新数据,保留新表的id和numb,并为旧表具有的任何额外列设置为null(新的好莱坞第1行)

我已经尝试了各种合并方法以及drop_duplicates方法。 后者的问题是我试图删除具有相同的alpha beta和zeta的重复项,但是由于行是完全相同的,因此经常从相同的数据源中删除它们。

这是合并时最终需要显示的内容。 new行中的2行是重复的,其中一行是要添加的。

|   alpha |       beta          | zeta        | id       | rand | numb|
| ------  | ------------------  | ------------| ------   | --- -| ----|
|   1     |        LA           |   bev       |  A100    | D    | 100 |
|   1     |        LA           |   malib     |  C150    | Z    | 150 |
|   2     |        NY           |   queens    |  B200    | N    | 200 |
|   2     |        NY           |   queens    |  B200    | N    | 200 |
|   3     |        Chic         |   lincpark  |  E300    | T    | 300 |
|   3     |        NY           |   Bronx     |  F300    | M    | 300 |
|   1     |        LA           |   Hwood     |  Q       |      | Q400|

我们可以通过几种方式合并两个数据帧。 python中最常见的方式是在Pandas中使用合并操作。 假设df1是新的,而df2是旧的

按照IF条件合并。

import pandas dfinal = df1.merge(df2, on="alpha", how = 'inner')

对于基于不同数据框的列进行合并,可以在同一列的两个不同名称不明确的情况下,特别指定左右通用列名称,例如-'idold'为'idnew'。

dfinal = df1.merge(df2, how='inner', left_on='alpha', right_on='id')

如果您想更具体一点,可以阅读pandas合并操作的文档。

还要指定“如果”条件并按行执行合并操作,然后将剩余的列放在临时数据框中。 并根据条件将值添加到该数据框。 我知道答案有点复杂,但您的问题也很复杂。 干杯:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM