我有两个这样的数据框:
它们具有相同的列。
由于我正在广播一个 API,它们通常有一些重叠,可以由tradeIDwhich 唯一处理。
我试过一些东西,如:
df2 = df0.join(df1, how='outer', lsuffix='_caller', rsuffix='_other')
和
df2 = df0.merge(df1, left_index=True, right_index=True)
但结果分别是:
我正在寻找一个没有重叠的工会,有人可以帮助我吗?
似乎combine_first()应该为你做:
df2 = df0.combine_first(df1)
Run Code Online (Sandbox Code Playgroud)
... wheredf0优先于df1索引匹配的时间。尽管在您的情况下,如果它们相同,则无关紧要。但如果它们不相同,那就是combine_first()工作原理。
以下是它处理虚拟数据的示例。
代码:
import pandas as pd
import io
a = io.StringIO(u'''
tradeID,amount,date
X001,100,1/1/2016
X002,200,1/2/2016
X003,300,1/3/2016
X005,500,1/5/2016
''')
b = io.StringIO(u'''
tradeID,amount,date
X004,400,1/4/2016
X005,500,1/5/2016
X006,600,1/6/2016
''')
dfA = pd.read_csv(a, index_col = 'tradeID')
dfB = pd.read_csv(b, index_col = 'tradeID')
df = dfA.combine_first(dfB)
Run Code Online (Sandbox Code Playgroud)
输出:
amount date
tradeID
X001 100.0 1/1/2016
X002 200.0 1/2/2016
X003 300.0 1/3/2016
X004 400.0 1/4/2016
X005 500.0 1/5/2016
X006 600.0 1/6/2016
Run Code Online (Sandbox Code Playgroud)
如果你真的想使用merge你仍然可以这样做,但你需要添加一些语法来保持你的索引(更多信息):
df = dfA.reset_index().merge(dfB.reset_index(), how = 'outer').set_index('tradeID')
Run Code Online (Sandbox Code Playgroud)
我在这两个选项上运行了超级基本的计时,并在这个非常小的数据集上combine_first()始终领先merge近 3 倍。
...和 Igor Raush 的版本在combine_first().
| 归档时间: |
|
| 查看次数: |
2283 次 |
| 最近记录: |