我想将两个数据帧A,B连接到一个没有重复行的新数据帧(如果B中的行已存在于A中,请不要添加):
数据帧A:数据帧B:
I II I II
0 1 2 5 6
1 3 1 3 1
Run Code Online (Sandbox Code Playgroud)
新数据帧:
I II
0 1 2
1 3 1
2 5 6
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
Rya*_*n G 57
最简单的方法是只进行连接,然后重复数据删除.
>>> df1
A B
0 1 2
1 3 1
>>> df2
A B
0 5 6
1 3 1
>>> pandas.concat([df1,df2]).drop_duplicates().reset_index(drop=True)
A B
0 1 2
1 3 1
2 5 6
Run Code Online (Sandbox Code Playgroud)
本reset_index(drop=True)是后来修复指标concat()和drop_duplicates().没有它你将有一个索引[0,1,0]而不是[0,1,2].dataframe如果不立即重置,这可能会导致进一步操作的问题.
如果 DataFrame A 中已有重复行,则连接然后删除重复行,将从 DataFrame A 中删除您可能想要保留的行。
在这种情况下,您需要创建一个具有累积计数的新列,然后删除重复项,这完全取决于您的用例,但这在时间序列数据中很常见
这是一个例子:
df_1 = pd.DataFrame([
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':6, 'value':34},])
df_2 = pd.DataFrame([
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':6, 'value':14},
])
df_1['count'] = df_1.groupby(['date','id','value']).cumcount()
df_2['count'] = df_2.groupby(['date','id','value']).cumcount()
df_tot = pd.concat([df_1,df_2], ignore_index=False)
df_tot = df_tot.drop_duplicates()
df_tot = df_tot.drop(['count'], axis=1)
>>> df_tot
date id value
0 11/20/2015 4 24
1 11/20/2015 4 24
2 11/20/2015 6 34
1 11/20/2015 6 14
Run Code Online (Sandbox Code Playgroud)