2

1.csv

     cut  price  depth  carat  table
0   Good    327   57.9   0.23   65.0
1   Good    335   63.3   0.31   58.0
2 Very Good 336   62.8   0.24   57.0
3 Very Good 336   62.3   0.24   57.0
4 Very Good 337   61.9   0.26   55.0
5 Premium   326   59.8   0.21   61.0
6  Premium  334   62.4   0.29   58.0
7   Good    400   64.0   0.30   55.0

2.csv

     cut  price  depth  carat  table
0   Good    327   57.9   0.23   65.0
1   Good    335   63.3   0.31   58.0
2 Very Good 336   62.8   0.24   57.0
3 Very Good 336   62.3   0.24   57.0
4 Very Good 337   61.9   0.26   50.0
5 Premium   326   59.8   0.21   61.0
6  Premium  334   60.4   0.29   58.0
7   Good    399   64.0   0.30   55.0

only 4,6,7 rows from 2.csv is changed

i'm looking to get

output like this

     cut  price  depth  carat  table
4 Very Good 337   61.9   0.26   50.0
6  Premium  334   60.4   0.29   58.0
7   Good    399   64.0   0.30   55.0

can anyone share your experience any kind of help is fine

import pandas as pd
f1 = pd.read_csv('1.csv')
f2 = pd.read_csv('2.csv')
columns_list = ['cut', 'price', 'depth', 'carat', 'table']

new_df= f2[~f2.price.isin(f1.price)]
print(new_df)

this is a sample code i wrote and it's working fine but i need to use the

f2[~f2.price.isin(f1.price)]

in a loop to get each columns name on that 'price' space and also that will return the value.i tried in normal way like this

for i in columns_list:
price = f2[~f2.i.isin(f1.i)]
print(price)

but pandas command is not work with like this way it's return an error like

AttributeError: 'DataFrame' object has no attribute 'i'

Thankz for reading, i hope you understand this

Vishal Vijayan
  • 57
  • 1
  • 2
  • 12
  • Hi, you can try something like: price = f2[~f2[i].isin(f1[i])]. This nomenclature should work. The actual string is not an attribute of the dataframe. So you have to select the column with this other method. Let me know if that helps. – Est Apr 01 '20 at 16:28

1 Answers1

2

IIUC, DataFrame.merge with indicator = True:

f2_filtered = (f2.merge(f1, how='outer', indicator=True)
                 .query('_merge == "left_only"')
                 .drop(columns = '_merge'))
print(f2_filtered)

Output

         cut  price  depth  carat  table
4  Very_Good    337   61.9   0.26   50.0
6    Premium    334   60.4   0.29   58.0
7       Good    399   64.0   0.30   55.0
ansev
  • 30,322
  • 5
  • 17
  • 31