Разделение номера и создание новых отдельных столбцов для каждого разбиения номера с помощью панд - PullRequest
0 голосов
/ 13 июня 2018

Добрый день,

У меня есть фрейм данных с таким столбцом, давайте предположим, что с 1000 строк, но вот пример:

 A 
12
24
36
48

Я хочу разбить число надва отдельных номера.Я хочу, чтобы результат выглядел следующим образом:

 A    B    C
12    1    2
24    2    4
36    3    6
48    4    8

Как мне добиться этого с помощью Pandas и Numpy?Помощь будет по достоинству оценена.Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 13 июня 2018

Другой подход, основанный на разбиении каждого символа числа, рассматриваемого как строка:

df = pd.DataFrame([12, 24, 36, 48], columns=['A'])

values = df['A'].values
split = [list(str(el)) for el in values]

out = pd.DataFrame(split, columns=['B', 'C']).astype(int)

, что дает:

out
   B  C
0  1  2
1  2  4
2  3  6
3  4  8
0 голосов
/ 13 июня 2018

Для df этого размера используйте floordiv и mod:

In[141]:
df['B'] = df['A'].floordiv(10)
df['C'] = df['A'].mod(10)
df

Out[141]: 
    A  B  C
0  12  1  2
1  24  2  4
2  36  3  6
3  48  4  8

Существуют также numpy эквиваленты, np.floor_divide и np.mod:

In[142]:
df['B'] = np.floor_divide(df['A'],10)
df['C'] = np.mod(df['A'],10)
df

Out[142]: 
    A  B  C
0  12  1  2
1  24  2  4
2  36  3  6
3  48  4  8

Numpy версии быстрее:

%%timeit
df['B'] = df['A'].floordiv(10)
df['C']= df['A'].mod(10)
1000 loops, best of 3: 733 µs per loop

%%timeit
df['B'] = np.floor_divide(df['A'],10)
df['C'] = np.mod(df['A'],10)

1000 loops, best of 3: 491 µs per loop
0 голосов
/ 13 июня 2018
In [15]: df.A.astype(str).str.extractall(r'(.)')[0].unstack().astype(np.int8)
Out[15]:
match  0  1
0      1  2
1      2  4
2      3  6
3      4  8
0 голосов
/ 13 июня 2018

Используйте floor и mod:

df['B'] = df['A'] // 10
df['C'] = df['A'] % 10

print (df)
    A  B  C
0  12  1  2
1  24  2  4
2  36  3  6
3  48  4  8

Если входные данные являются строками, возможна индексация по позициям по []:

print (df['A'].apply(type))
0    <class 'str'>
1    <class 'str'>
2    <class 'str'>
3    <class 'str'>
Name: A, dtype: object

df['B'] = df['A'].str[0]
df['C'] = df['A'].str[1]
#if necessary convert all columns to integers
df = df.astype(int)
print (df)
    A  B  C
0  12  1  2
1  24  2  4
2  36  3  6
3  48  4  8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...