我有两个数据帧.例子:
df1:
Date Fruit Num Color
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange 8.6 Orange
2013-11-24 Apple 7.6 Green
2013-11-24 Celery 10.2 Green
df2:
Date Fruit Num Color
2013-11-24 Banana 22.1 Yellow
2013-11-24 Orange 8.6 Orange
2013-11-24 Apple 7.6 Green
2013-11-24 Celery 10.2 Green
2013-11-25 Apple 22.1 Red
2013-11-25 Orange 8.6 Orange
Run Code Online (Sandbox Code Playgroud)
每个数据帧都以Date作为索引.两个数据帧都具有相同的结构.
我想要做的是比较这两个数据帧,并找出df2中哪些行不在df1中.我想比较日期(索引)和第一列(Banana,APple等),看看它们是否存在于df2和df1中.
我尝试过以下方法:
对于第一种方法,我得到了这个错误:"异常:只能比较标记相同的DataFrame对象".我已经尝试删除日期作为索引,但得到相同的错误.
在第三种方法中,我得到断言返回False但无法弄清楚如何实际看到不同的行.
任何指针都会受到欢迎
我需要逐行比较两个不同大小的数据帧并打印出不匹配的行.让我们采取以下两点:
df1 = DataFrame({
'Buyer': ['Carl', 'Carl', 'Carl'],
'Quantity': [18, 3, 5, ]})
df2 = DataFrame({
'Buyer': ['Carl', 'Mark', 'Carl', 'Carl'],
'Quantity': [2, 1, 18, 5]})
Run Code Online (Sandbox Code Playgroud)
什么是在df2上逐行排列并打印不在df1中的行的最有效方法,例如:
Buyer Quantity
Carl 2
Mark 1
Run Code Online (Sandbox Code Playgroud)
重要提示:我不想要排:
Buyer Quantity
Carl 3
Run Code Online (Sandbox Code Playgroud)
包含在差异中:
我已经尝试过: 逐行比较两个不同长度的数据帧,并为每行添加相同值的列, 并将两个Pandas数据帧中的输出差异并排显示 - 突出显示差异
但这些与我的问题不符.
谢谢
安迪
一个简单的熊猫问题:
是否有drop_duplicates()功能可以删除复制中涉及的每一行?
一个等效的问题如下:pandas对数据帧有不同的设置吗?
例如:
In [5]: df1 = pd.DataFrame({'col1':[1,2,3], 'col2':[2,3,4]})
In [6]: df2 = pd.DataFrame({'col1':[4,2,5], 'col2':[6,3,5]})
In [7]: df1
Out[7]:
col1 col2
0 1 2
1 2 3
2 3 4
In [8]: df2
Out[8]:
col1 col2
0 4 6
1 2 3
2 5 5
Run Code Online (Sandbox Code Playgroud)
所以也许df2.set_diff(df1)会产生这样的东西:
col1 col2
0 4 6
2 5 5
Run Code Online (Sandbox Code Playgroud)
但是,我不想依赖索引,因为在我的情况下,我必须处理具有不同索引的数据帧.
顺便说一下,我最初考虑过当前drop_duplicates()方法的扩展,但现在我意识到使用集合论属性的第二种方法通常会更有用.但是,这两种方法都解决了我当前的问题
谢谢!
是否有更有效的方法将一个DF中每行的每列与另一个DF的每一行中的每一列进行比较?这对我来说很邋,,但我的循环/应用尝试要慢得多.
df1 = pd.DataFrame({'a': np.random.randn(1000),
'b': [1, 2] * 500,
'c': np.random.randn(1000)},
index=pd.date_range('1/1/2000', periods=1000))
df2 = pd.DataFrame({'a': np.random.randn(100),
'b': [2, 1] * 50,
'c': np.random.randn(100)},
index=pd.date_range('1/1/2000', periods=100))
df1 = df1.reset_index()
df1['embarrassingHackInd'] = 0
df1.set_index('embarrassingHackInd', inplace=True)
df1.rename(columns={'index':'origIndex'}, inplace=True)
df1['df1Date'] = df1.origIndex.astype(np.int64) // 10**9
df1['df2Date'] = 0
df2 = df2.reset_index()
df2['embarrassingHackInd'] = 0
df2.set_index('embarrassingHackInd', inplace=True)
df2.rename(columns={'index':'origIndex'}, inplace=True)
df2['df2Date'] = df2.origIndex.astype(np.int64) // 10**9
df2['df1Date'] = 0
timeit df3 = abs(df1-df2)
Run Code Online (Sandbox Code Playgroud)
10个循环,最佳3:60.6 ms每个循环
我需要知道进行了哪种比较,因此将每个相反指数的丑陋添加到比较DF,以便它最终在最终DF中.
在此先感谢您的任何帮助.