Home > Mobile >  Balancing Dataset in Pandas
Balancing Dataset in Pandas

Time:07-31

I have a dataset in a form of a pandas dataframe, the data has this form:

file_path, label
   -        -

the label is either one or zero, if I run this function for checking the frequency of every label

data["labels"].value_counts()

0    197664
1     78444

I want to remove lets say 20K rows of the label 0 only How can this be done?

CodePudding user response:

You can drop the last 20K rows on some condition using pandas drop.

df.drop(df[df.labels == 0].index[-20000:], inplace=True)

CodePudding user response:

mydict = {
  "file_path" : ["a", "b", "c", "d", "e" , "f", "g"],
  "label" : [0, 1, 0, 1, 1, 1, 0]
}
df = pd.DataFrame(mydict)
file_path label
0 a 0
1 b 1
2 c 0
3 d 1
4 e 1
5 f 1
6 g 0

if your labels are 1 or 0 and you want get only "1" label, you can group your dataset by "label" column and then use get_group() :

get_1 = df.groupby("label").get_group(1)
get_1
file_path label
1 b 1
3 d 1
4 e 1
5 f 1

CodePudding user response:

Usually I do split then concat

df1 = df.iloc[:20000]
df2 = df.drop(df1.index)
new = pd.concat([df1[df1['labels'] != 0], df2])
  • Related