#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. Вы хотите, чтобы я добавил?