我有两个大熊猫数据集
旧:
parseSomeField(overlay.a);
新:
| 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 |
(列和数据没有什么特别的意义,仅是示例)。
我想以这样的方式合并数据集
请注意,旧的第3行和第4行相同,但我们仍然保留两者。如果这些行在新行中有2个重复项,则我们将它们视为1-1对应。如果在第3行的新行中有3个重复项,而在旧行的第4行中有3个重复项,则将2个视为副本(我们不添加它们,但是在合并它们时会添加第三个)
如果old.alpha,old.beta和old.zeta =它们对应的新列,并且如果old.numb包含在new.numb中,则仅保留旧表中的条目。 (在这种情况下,具有lincpark的旧行的第5行将被保留,而具有lincpark的新行的第3行将被保留,因为new.numb中包含300))
否则,将新数据添加为新数据,保留新表的id和numb,并对旧表具有的任何额外列(新行包含好莱坞的第1行)为null
我已经尝试了各种合并方法以及drop_duplicates方法。后者的问题是我试图删除具有相同的alpha beta和zeta的重复项,但是由于行是完全相同的,因此经常从相同的数据源中删除它们。
这是合并时最终需要显示的内容。新行中的2行是重复的,其中一行是要添加的。
| alpha | beta | zeta | id | numb |
| ------ | ------------------ | ---------------| ------| -----|
| 1 | LA | Hwood | Q | Q400 |
| 2 | NY | queens | B | B200 |
| 3 | Chic | lincpark | D | D300 |
答案 0 :(得分:0)
我们可以通过几种方式合并两个数据帧。 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合并操作的文档。
还要指定If条件并按行执行合并操作,然后将剩余的列放在临时数据框中。并根据条件将值添加到该数据框。 我知道答案有点复杂,但您的问题也很复杂。干杯:)