Python Pandas加入:如果一列不起作用,请尝试其他

时间:2015-10-07 21:40:17

标签: python pandas merge

给出以下数据框:

import pandas as pd
df1 = pd.DataFrame({'Last':['Smith','Jones','Johnson'], 'First': ['Tom', 'Jim', 'Neil'], 'DOB':['1/1/2010', '3/1/2012', '4/3/2011'], 'ID': [1,2,3]})
df1


     DOB      First  ID Last
0   1/1/2010    Tom  1  Smith
1   3/1/2012    Jim  2  Jones
2   4/3/2011    Neil 3  Johnson

df2 = pd.DataFrame({'Last':['S','J','Johnson'], 'First': ['T', 'J', 'Neil'], 'DOB':['1/1/2010', '3/1/2012', '4/3/2011'],'ID': [1,2,5]})
df2

     DOB    First   ID  Last
0   1/1/2010    T   1   S
1   3/1/2012    J   2   J
2   4/3/2011    Neil5   Johnson

我想在pandas中加入(合并)它们,如下所示:

  1. 尝试合并ID = ID

  2. 如果不存在比赛(即Neil Johnson),

  3. 一个。合并最后,首先,DOB =最后,第一,DOB

2 个答案:

答案 0 :(得分:2)

合并ID

df3 = pd.merge(df1,df2,on='ID')

合并dob上的剩余条目,第一个和最后一个

df4 = pd.merge(df1.drop(df3.index), df2.drop(df3.index), on = ['DOB','First','Last'])

连接两种类型的合并:

我会告诉你,你必须决定如何匹配你的专栏。

答案 1 :(得分:1)

关于合并:

merge方法接受以下参数:

  • left:仅保留第一个数据框中的键
  • 右:仅保留第二个数据框中的键
  • inner:保持交集(这是默认行为)
  • outer:保持密钥的联合(全部)

所以如果你想要交集:

merged = pd.merge(df1, df2, on "ID", how="inner")

相当于:

df1['Last']=df1['Last'].str[:1]
df2['Last']=df2['Last'].str[:1]

关于你的观点" a"我会删除" Last"的第一个字母。列然后将其与其他两个连接起来。

df1["key"] = df1["Last"]+df1["First"]+df1["DOB"]
df2["key"] = df2["Last"]+df2["First"]+df2["DOB"]

merged = pd.merge(df1, df2, on "key", how="inner")

print(merged)

然后我会使用合并方法:

{{1}}