Как упорядочить числа, создавая новые столбцы в pandas

#python #pandas #dataset

#python #pandas #набор данных

Вопрос:

Пример набора данных в pandas

Ниже приведен набор данных с 3 столбцами.

 c1 c2 c3
1  2   0
3  4   0
5  6   1
7  8   1
  

Теперь я хочу упорядочить вышеуказанный набор данных таким образом, чтобы числа [3,4] и [7,8] попадали под столбцы c3 и c4.

 c1 c2 c3 c4 c5
1  2  3  4  0
5  6  7  8  1
  

Код для набора данных,

 data = {'c1':[1,2,4,6], 'c2':[2,3,5,7], 'c3':[0,0,1,1]}
data = pd.DataFrame(data)
  

Упражнение

Предположим, что существует 1000 таких строк с классами [0 или 1] для каждой строки.
Как вы упорядочиваете числа в каждых 2 строках в столбцах c3 и c4?

 df = {'c1':[1,2,4,6,15,143,114,104,80,
            89,100,104,70,99,70,46], 'c2':[2,3,5,7,85,80,
            89,100,104,70,123,43,32,90,123,87], 'c3':[0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1]}

     c1   c2  c3
0     1    2   0
1     2    3   0
2     4    5   0
3     6    7   0
4    15   85   0
5   143  109   0
6   114   80   0
7   104   89   0
9    80  104   1
10   89   70   1
11  100  123   1
12  104   43   1
13   70   32   1
14   99   90   1
15   70  101   1
16   46  123   1
  

Упражнение 2

Назначьте классы соответствующим образом.

 df = pd.DataFrame(df)
a = df[['c1','c2']].to_numpy().reshape(8, -1)

Expected output :-
        c1  c2  c3  c4  c5
         1   2   2   3  0
         4   5   6   7  0
        15  85 143  109 0
       114  80 104   89 0
       109 100  80  104 1
        89  70 100  123 1
       104  43 70   32  1
        99  90 70   101 1
  

Упражнение 3

Увеличение столбцов

 Expected output :-
        c1  c2  c3  c4  c5  c6  c7   c8  c9
         1   2   2   3  4   5   6    7    0
         
        15  85 143  109 114  80 104  89   0
       
       109 100  80  104 89  70  100  123  1
        
       104  43 70   32  99  90   70  101  1 
                   
  

Ответ №1:

Выберите столбцы для обработки в списке, затем преобразуйте в массив numpy по DataFrame.to_numpy , а затем измените по (2, -1) — здесь -1 имеется в виду, что numpy вычисляет по данным, сколько новых «столбцов» создано:

 a = df[['c1','c2']].to_numpy().reshape(2, -1)
print (a)
[[1 2 3 4]
 [5 6 7 8]]
  

Последний переход к DataFrame конструктору и добавление нового столбца с [0,1] :

 df = pd.DataFrame(a).assign(new=[0,1])
print (df)
   0  1  2  3  new
0  1  2  3  4    0
1  5  6  7  8    1
  

 a = df[['c1','c2']].to_numpy().reshape(2, -1)
print (a)
[[  1   2   2   3   4   5   6   7  15  85 143 109 114  80 104  89 109 100]
 [ 80 104  89  70 100 123 104  43  70  32  99  90  70 101  46 123  45  87]]

df = pd.DataFrame(a).assign(new=[0,1])
print (df)
    0    1   2   3    4    5    6   7   8   9   10   11   12   13   14   15  
0   1    2   2   3    4    5    6   7  15  85  143  109  114   80  104   89   
1  80  104  89  70  100  123  104  43  70  32   99   90   70  101   46  123   

    16   17  new  
0  109  100    0  
1   45   87    1  
  

Редактировать:

 df = pd.DataFrame(df)
a = df[['c1','c2']].to_numpy().reshape(8, -1)
       
df1 = pd.DataFrame(a)
df1['new'] = df['c3'].to_numpy().reshape(8, -1)[:, 0]
print (df1)
     0    1    2    3  new
0    1    2    2    3    0
1    4    5    6    7    0
2   15   85  143   80    0
3  114   89  104  100    0
4   80  104   89   70    1
5  100  123  104   43    1
6   70   32   99   90    1
7   70  123   46   87    1
  

Комментарии:

1. предположим, что таких строк 10 тыс., и что, если я захочу применить вышеуказанный метод для каждых 2 строк.

2. Подумайте, что 0 и 1 — это 2 класса, и для каждого из них есть 10 тысяч образцов, которым присвоен класс.

3. @AdityaNikhil — Возможно ли добавить больше строк в образец?

4. Да, это возможно.

5. Вы хотите, чтобы я добавил?