Python 熊猫:比较,;合并2个数据帧';包含字典的列的集合
我有两个不同的数据帧,如下所示Python 熊猫:比较,;合并2个数据帧';包含字典的列的集合,python,pandas,merge,Python,Pandas,Merge,我有两个不同的数据帧,如下所示 df1: class name 0 I {'tom':2,'sam':14} 1 II {'ram':11,'joe':1} df2: class school area name 0 I mount north view, ca {'tom':0,'sam':0,'keith':0,'jhon':0} 1 II zion garden city, sa {'
df1:
class name
0 I {'tom':2,'sam':14}
1 II {'ram':11,'joe':1}
df2:
class school area name
0 I mount north view, ca {'tom':0,'sam':0,'keith':0,'jhon':0}
1 II zion garden city, sa {'rita':0,'tommy':0,'kelvin':0,'ram':0,'joe':0}
如何比较df1和df2,更新学校和地区的列,并假设结果df1为
df1:
class school area name_1 name_2
0 I mount north view, ca {'tom':2,'sam':14} {'tom':0,'sam':0,'keith':0,'jhon':0}
1 II zion garden city, sa {'ram':11,'joe':1} {'rita':0,'tommy':0,'kelvin':0,'ram':0,'joe':0}
- 如果df1中“name”列的所有键都位于df2的“name”列键中,则必须在df1上更新相应行的“school”和“area”列
- 如果df1中“name”列的所有键不在df2的“name”列键中,则相应行的“school”和“area”列必须在df1上更新为None
df1 = df1.merge(df2, how='left')
这是否达到目的?请注意,我更改了
df2
的最后一行,以查看是否没有正确填充任何值
df1 = pd.DataFrame({'class':[1,2], 'name': [{'tom':2,'sam':14},{'ram':11,'joe':1}]})
df2 = pd.DataFrame({'class':[1,2], 'school': ['mount','zion'], 'area':['north view, ca', 'garden city, sa'], 'name': [{'tom':0,'sam':0,'keith':0,'jhon':0}, {'rita':0,'tommy':0,'kelvin':0,'ram':0}]})
df1["name_concat"] = df1["name"].apply(lambda x: tuple(x.keys()))
df2["name_concat"] = df2["name"].apply(lambda x: tuple(x.keys()))
df = df1.merge(df2, how='left', on='class', suffixes=['_1', '_2'])
df[["school", "area"]] = df.apply(
lambda x: x[["school", "area"]] if all(x1 in x["name_concat_2"] for x1 in x["name_concat_1"]) else [None,None], axis=1)
print(df)
如果它不匹配(不同的键)?@pyd它应该更新为非。它只是元素级比较还是需要合并?你能为不匹配和它的期望值再添加一行吗output@thushv89,如果df1.name中的所有键都与df2.name匹配,则应将其合并,否则不合并