2016-09-09 5 views
0

Мой dataframe df равен 3020x4. Я хотел бы удалить подмножество df1 20x4 из оригинала. Другими словами, я просто хочу получить разницу, чья форма 3000x4. Я попробовал ниже, но это не сработало. Он вернул ровно df. Не могли бы вы помочь? Благодарю.Как удалить подмножество фрейма данных в Python?

new_df = df.drop(df1) 
+1

Что это за подмножество? это число значений индекса, конкретных значений и т. д.? – EdChum

+1

Или вы просто хотите разделить 2 dfs? например, 'merged = df.merge (df1, indicator = True, how = 'left')' 'merged [merged ['_ merge'] == 'left_only']' – EdChum

ответ

1

Как вы, кажется, не в состоянии опубликовать типичный пример я продемонстрирую один подход с использованием merge с парами indicator=True:

Так сгенерировать данные:

In [116]: 
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc')) 
df 

Out[116]: 
      a   b   c 
0 -0.134933 -0.664799 -1.611790 
1 1.457741 0.652709 -1.154430 
2 0.534560 -0.781352 1.978084 
3 0.844243 -0.234208 -2.415347 
4 -0.118761 -0.287092 1.179237 

взять подмножество:

In [118]: 
df_subset=df.iloc[2:3] 
df_subset 

Out[118]: 
     a   b   c 
2 0.53456 -0.781352 1.978084 

сейчас выполняют левые merge с парам indicator=True это добавит _merge столбец, который указывает, является ли строка left_only, both или right_only (последняя не появится в этом примере), и мы фильтруем слитый ФР показать только left_only:

In [121]: 
df_new = df.merge(df_subset, how='left', indicator=True) 
df_new = df_new[df_new['_merge'] == 'left_only'] 
df_new 

Out[121]: 
      a   b   c  _merge 
0 -0.134933 -0.664799 -1.611790 left_only 
1 1.457741 0.652709 -1.154430 left_only 
3 0.844243 -0.234208 -2.415347 left_only 
4 -0.118761 -0.287092 1.179237 left_only 

здесь является оригинальным объединенным df:

In [122]: 
df.merge(df_subset, how='left', indicator=True) 

Out[122]: 
      a   b   c  _merge 
0 -0.134933 -0.664799 -1.611790 left_only 
1 1.457741 0.652709 -1.154430 left_only 
2 0.534560 -0.781352 1.978084  both 
3 0.844243 -0.234208 -2.415347 left_only 
4 -0.118761 -0.287092 1.179237 left_only 
+0

index_to_keep = df.index.symmetric_difference (subset.index) ; df.loc [index_to_keep,:] – PhilChang

+0

@PhilChang, предполагающий, что индексы вместе с их содержимым совпадают между большим df и подмножеством, поскольку OP не размещает никаких выборочных данных, здесь «слияние» будет работать так как он будет использовать значения столбца – EdChum

+0

@EdChum благодарит! Это решило мою проблему! – XUTADO

Смежные вопросы