Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于特定列信息合并两个数据帧_Python_Pandas_Dictionary_Dataframe - Fatal编程技术网

Python 基于特定列信息合并两个数据帧

Python 基于特定列信息合并两个数据帧,python,pandas,dictionary,dataframe,Python,Pandas,Dictionary,Dataframe,我试图用几种方法处理数据帧。 现在我想根据特定的列信息合并两个数据帧,并删除重复的行 可能吗? 我试图使用连接函数,但失败了 例如,如果我想用 条件: 如果c1和c2信息相同,则删除重复的行(仅使用df1,即使df1和df2之间的c3数据不同) 如果c1和c2信息不同,则使用两行(df1、df2) 之前: df1 c1 c2 c3 0 0 x {'a':1 ,'b':2} 1 0 y {'a':3 ,'b':4} 2 2 z {'a':5 ,'b'

我试图用几种方法处理数据帧。 现在我想根据特定的列信息合并两个数据帧,并删除重复的行

可能吗? 我试图使用连接函数,但失败了

例如,如果我想用

条件:

  • 如果c1和c2信息相同,则删除重复的行(仅使用df1,即使df1和df2之间的c3数据不同)
  • 如果c1和c2信息不同,则使用两行(df1、df2)
之前:

df1
 c1  c2  c3
0    0   x  {'a':1 ,'b':2} 
1    0   y  {'a':3 ,'b':4}
2    2   z  {'a':5 ,'b':6}

df2
     c1  c2  c3
0    0   x  {'a':11 ,'b':12}
1    0   y  {'a':13 ,'b':14}
2    3   z  {'a':15 ,'b':16}
预期结果d3:

    c1  c2  c3
0    0   x  {'a':1 ,'b':2}
1    0   y  {'a':3 ,'b':4}
2    2   z  {'a':5 ,'b':6}
3    3   z  {'a':15 ,'b':16}

在此处输入代码

您可以首先通过使用
合并
确定哪些行仅在df2中,并传递
how='right'
indicator=True
,然后使用
df1
确定该行:

In [125]:
merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True)
merged = merged[merged['_merge']=='right_only']
merged = merged.rename(columns={'c3_y':'c3'})
merged

Out[125]:
   c1 c2 c3_x                c3      _merge
2   3  z  NaN  {'a':15 ,'b':16}  right_only

In [126]:    
combined = pd.concat([df1, merged[df1.columns]])
combined

Out[126]:
   c1 c2                c3
0   0  x    {'a':1 ,'b':2}
1   0  y    {'a':3 ,'b':4}
2   2  z    {'a':5 ,'b':6}
2   3  z  {'a':15 ,'b':16}
如果我们分解上述内容:

In [128]:
merged = df1.merge(df2, left_on=['c1','c2'], right_on=['c1','c2'], how='right', indicator=True)
merged

Out[128]:
   c1 c2            c3_x              c3_y      _merge
0   0  x  {'a':1 ,'b':2}  {'a':11 ,'b':12}        both
1   0  y  {'a':3 ,'b':4}  {'a':13 ,'b':14}        both
2   3  z             NaN  {'a':15 ,'b':16}  right_only

In [129]:
merged = merged[merged['_merge']=='right_only']
merged

Out[129]:
   c1 c2 c3_x              c3_y      _merge
2   3  z  NaN  {'a':15 ,'b':16}  right_only

In [130]:
merged = merged.rename(columns={'c3_y':'c3'})
merged

Out[130]:
   c1 c2 c3_x                c3      _merge
2   3  z  NaN  {'a':15 ,'b':16}  right_only

合并功能怎么样?