簡體   English   中英

如何隨機刪除Pandas數據框中的行,直到一列中值的數量相等?

[英]How to randomly drop rows in Pandas dataframe until there are equal number of values in a column?

我有一個帶有兩列Xy的數據框pd

pd[y]我的整數從110110 但是它們具有不同的頻率:

df[y].value_counts()


10    6645
9     6213
8     5789
7     4643
6     2532
5     1839
4     1596
3      878
2      815
1      642

我想削減我的數據框,以便每個標簽出現的次數相等。 由於我希望每個標簽的數量相等,因此最小頻率為642 因此,我只想在數據框中保留642每個類標簽的隨機采樣行,以便新數據框的每個類標簽具有642

我認為可能有所幫助,但是分層僅使每個標簽的百分比保持不變,但我希望所有標簽的頻率相同。

作為數據框的示例:

df = pd.DataFrame()
df['y'] = sum([[10]*6645, [9]* 6213,[8]* 5789, [7]*4643,[6]* 2532, [5]*1839,[4]* 1596,[3]* 878, [2]*815, [1]* 642],[])
df['X'] = [random.choice(list('abcdef')) for i in range(len(df))]

pd.samplegroupby 一起使用-

df = pd.DataFrame(np.random.randint(1, 11, 100), columns=['y'])
val_cnt = df['y'].value_counts()
min_sample = val_cnt.min()
print(min_sample) # Outputs 7 in as an example
print(df.groupby('y').apply(lambda s: s.sample(min_sample)))

產量

        y
y        
1  68   1
   8    1
   82   1
   17   1
   99   1
   31   1
   6    1
2  55   2
   15   2
   81   2
   22   2
   46   2
   13   2
   58   2
3  2    3
   30   3
   84   3
   61   3
   78   3
   24   3
   98   3
4  51   4
   86   4
   52   4
   10   4
   42   4
   80   4
   53   4
5  16   5
   87   5
...    ..
6  26   6
   18   6
7  56   7
   4    7
   60   7
   65   7
   85   7
   37   7
   70   7
8  93   8
   41   8
   28   8
   20   8
   33   8
   64   8
   62   8
9  73   9
   79   9
   9    9
   40   9
   29   9
   57   9
   7    9
10 96  10
   67  10
   47  10
   54  10
   97  10
   71  10
   94  10

[70 rows x 1 columns]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM