我有一个Pandas中的DataFrame (df1
):
df1 = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))
print df1
A B C D
0.860379 0.726956 0.394529 0.833217
0.014180 0.813828 0.559891 0.339647
0.782838 0.698993 0.551252 0.361034
0.833370 0.982056 0.741821 0.006864
0.855955 0.546562 0.270425 0.136006
0.491538 0.445024 0.971603 0.690001
0.911696 0.065338 0.796946 0.853456
0.744923 0.545661 0.492739 0.337628
0.576235 0.219831 0.946772 0.752403
0.164873 0.454862 0.745890 0.437729
我想检查另一个数据帧(df2
)中的任何一行(所有列)是否存在于df1
中。以下是df2
:
df2 = df1.ix[4:8]
df2.reset_index(drop=True,inplace=True)
df2.loc[-1] = [2, 3, 4, 5]
df2.loc[-2] = [14, 15, 16, 17]
df2.reset_index(drop=True,inplace=True)
print df2
A B C D
0.855955 0.546562 0.270425 0.136006
0.491538 0.445024 0.971603 0.690001
0.911696 0.065338 0.796946 0.853456
0.744923 0.545661 0.492739 0.337628
0.576235 0.219831 0.946772 0.752403
2.000000 3.000000 4.000000 5.000000
14.000000 15.000000 16.000000 17.000000
我尝试使用df.lookup
逐行搜索。 我是这样做的:
list1 = df2.ix[0].tolist()
cols = df1.columns.tolist()
print df1.lookup(list1, cols)
但我收到了这个错误信息:
File "C:\Users\test.py", line 19, in <module>
print df1.lookup(list1, cols)
File "C:\python27\lib\site-packages\pandas\core\frame.py", line 2217, in lookup
raise KeyError('One or more row labels was not found')
KeyError: 'One or more row labels was not found'
我也尝试过使用.all()
:
print (df2 == df1).all(1).any()
但是我遇到了这个错误信息:
File "C:\Users\test.py", line 12, in <module>
print (df2 == df1).all(1).any()
File "C:\python27\lib\site-packages\pandas\core\ops.py", line 884, in f
return self._compare_frame(other, func, str_rep)
File "C:\python27\lib\site-packages\pandas\core\frame.py", line 3010, in _compare_frame
raise ValueError('Can only compare identically-labeled '
ValueError: Can only compare identically-labeled DataFrame objects
我也尝试过像这样使用isin()
:
print df2.isin(df1)
但是我到处得到的都是False
,这是不正确的:
A B C D
False False False False
False False False False
False False False False
False False False False
False False False False
False False False False
False False False False
False False False False
False False False False
False False False False
能否通过比较两个数据框的行来搜索一组数据框中的行?
编辑:如果这些行在df1中也存在,是否可以删除
df2
中的这些行?
on = ['A', 'B', 'C', 'D']
替换为on = df1.columns
?” - edeszon=list(df1.columns)
或等价的on=list(df2.columns)
。如果你想要检查行是否相同(所有列),则 df1 和 df2 中的列必须是相同的。 - Andrewdf1
)中也存在的来自df2
的行,是否可以获取pd.merge()
的结果,然后删除在df1
中也存在的df2
中的行? - edeszdf12
和df2
。您是不是想说df2['key'] = 'x'
和temp_df = pd.merge(df2, df1, on=df2.col......
。 - edeszmax(len(df1), len(df2))
项。但是当我执行pd.merge(df1, df2, on=df1.columns.tolist()[:-1], how='inner')
时,输出结果却是> max(len(df1), len(df2))
?我错过了什么吗? - Vishal