如何获得2个pandas数据帧的差异或增量

时间:2015-03-05 12:16:37

标签: python pandas

如何获得具有不同列名但包含相似类型数据的2个pandas数据帧的差异或增量。

以下:

df1 = 
     'Site ID'     'Band'
0     101           850
1     101           900
2     102           850
3     A01           850
4     A01           900
5     X12           900
6     B08           850

df2 =
     'SITENO'      'FREQ'
0     101           850
1     101           900
2     102           850
3     A01           850
4     A01           900
5     B08           900
6     Z99           850

现在我想要一个与此类似的输出

delta_df1 = 
     'Site ID'     'Band'
0     B08           850
1     X12           900

delta_df2 =
     'SITENO'      'FREQ'
0     B08           900
1     Z99           850
抱歉,我必须编辑发布的问题,我错过了上面的内容。应该有一个网站具有相同的网站ID / siteno但具有不同的频段。 delta应该在这些货币对上产生输出。

1 个答案:

答案 0 :(得分:1)

给出两列:

col1 = df1['Site ID']
col2 = df2['SITENO']

你可以找到

的设定差异
In [107]: set(col1).difference(col2)
Out[107]: {'X12'}

可用于构建布尔选择掩码:

In [108]: col1.isin(set(col1).difference(col2))
Out[108]: 
0    False
1    False
2    False
3    False
4    False
5     True
Name: Site ID, dtype: bool

并使用df1选择df1.loc行:

In [109]: df1.loc[col1.isin(set(col1).difference(col2))] 
Out[109]: 
  Site ID  Band
5     X12   900

import pandas as pd

df1 = pd.read_table('data', sep='\s{2,}')
df2 = pd.read_table('data2', sep='\s+')

col1 = df1['Site ID']
col2 = df2['SITENO']

delta_df1 = df1.loc[col1.isin(set(col1).difference(col2))] 
print(delta_df1)

delta_df2 = df2.loc[col2.isin(set(col2).difference(col1))] 
print(delta_df2)

产量

  Site ID  Band
5     X12   900

  SITENO  FREQ
5    B08   850
6    Z99   850