2016-02-19 4 views
1

缺少的交點刪除數據幀的行我有一個數據幀,例如:其與另一個數據幀

name value_1 ... value_n 
1 a  11.5 ... 13.2 
2 b  11.5 ... 17.9 
3 a  10.0 ... 21.3 
4 a  9.5  ... 11.1 
5 b  10.0 ... 7.2 
6 a  10.5 ... 3.0 

我通過名稱分組,所以我現在2個dataframes:

name value_1 ... value_n 
1 a  11.5 ... 13.2 
3 a  10.0 ... 21.3 
4 a  9.5  ... 11.1 
6 a  10.5 ... 3.0 

    name value_1 ... value_n 
2 b  11.5 ... 17.9 
5 b  10.0 ... 7.2 

然後,我只想保留那些value_1在兩個數據框中的條目。我不關心其他專欄。我嘗試:

  1. 使用isin - >不行的,因爲它要求所有的列包含相同的數據
  2. 路口:pd.merge(group_a, group_b, how='inner', on=['value_1']),哪種作品,但在一個數據幀結果中含有的列行合併,如value_n_xvalue_n_y,這不符合我的需要

任何其他想法?

回答

1

我想你可以嘗試的兩種dfmergesubsets

print group_a 
    name value_1 value_n 
1 a  11.5  13.2 
3 a  10.0  21.3 
3 a  10.0  21.3 
4 a  9.5  1.1 
6 a  10.5  3.0 

print group_b 
    name value_1 value_n 
2 b  11.5  17.9 
5 b  10.0  7.2 

print pd.merge(group_a[['value_1']], group_b[['value_1']], how='inner', on=['value_1']) 
    value_1 
0  11.5 
1  10.0 
2  10.0 

二的解決方案使用numpy.intersect1dlocisin

inter = np.intersect1d(group_a['value_1'], group_b['value_1']) 
print inter 
[ 10. 11.5] 

mask1 = group_a['value_1'].isin(inter) 
mask2 = group_b['value_1'].isin(inter) 

print group_a.loc[mask1] 
    name value_1 value_n 
1 a  11.5  13.2 
3 a  10.0  21.3 
3 a  10.0  21.3 

print group_b.loc[mask2] 
    name value_1 value_n 
2 b  11.5  17.9 
5 b  10.0  7.2 
+0

但是,這並不幫助我實現我的主要目標,這從inicial dataframe中刪除其餘的行。這隻改變了我的方法,只給出了value_1行,而不是來自interserction的所有行。任何想法? –

+0

我認爲你的違規行爲非常好,只有我想通過刪除不必要的專欄來改善它。 – jezrael

+0

當然,我很欣賞它,但我仍然需要獲得這些結果,並以某種方式使用它們從初始數據框中移除那些不在合併結果中的條目。目前我正在手動完成迭代結果,但似乎沒有編輯 –