Sur*_* Li 16 python merge dataframe pandas
pandas(或其他模块)是否具有支持基于多个键合并(或连接)两个表的任何函数?
例如,我有两个表(DataFrames)a和b:
>>> a
A B value1
1 1 23
1 2 34
2 1 2342
2 2 333
>>> b
A B value2
1 1 0.10
1 2 0.20
2 1 0.13
2 2 0.33
Run Code Online (Sandbox Code Playgroud)
期望的结果是:
A B value1 value2
1 1 23 0.10
1 2 34 0.20
2 1 2342 0.13
2 2 333 0.33
Run Code Online (Sandbox Code Playgroud)
Ale*_*ley 50
要通过多个键进行合并,您只需将列表中的键传递给pd.merge:
>>> pd.merge(a, b, on=['A', 'B'])
A B value1 value2
0 1 1 23 0.10
1 1 2 34 0.20
2 2 1 2342 0.13
3 2 2 333 0.33
Run Code Online (Sandbox Code Playgroud)
实际上,默认设置pd.merge是使用两个DataFrames的列标签的交集,因此pd.merge(a, b)在这种情况下同样可以正常工作.
根据最新的 pandas 文档, on 参数接受字段名称上的alabel或list,并且必须在两个数据框中都可以找到。这是一个 MWE 用于它的用途:
a = pd.DataFrame({'A':['0', '0', '1','1'],'B':['0', '1', '0','1'], 'v':True, False, False, True]})
b = pd.DataFrame({'A':['0', '0', '1','1'], 'B':['0', '1', '0','1'],'v':[False, True, True, True]})
result = pd.merge(a, b, on=['A','B'], how='inner', suffixes=['_and', '_or'])
>>> result
A B v_and v_or
0 0 0 True False
1 0 1 False True
2 1 0 False True
3 1 1 True True
Run Code Online (Sandbox Code Playgroud)
on :标签或列表要加入的列或索引级别名称。这些必须在两个 DataFrame 中都能找到。如果 on 为 None 并且不合并索引,则默认为两个 DataFrame 中列的交集。
查看最新的pd.merge文档以获取更多详细信息。