Преобразование нескольких столбцов в кадре данных одновременно - PullRequest
0 голосов
/ 21 мая 2018

У меня есть некоторые данные, которые я пытаюсь очистить.Это включает в себя изменение некоторых столбцов, объединение других столбцов в новые и т. Д. Мне интересно, есть ли способ сделать это кратким способом в пандах или каждая операция должна быть отдельной строкой кода.Вот пример:

ex_df = pd.DataFrame(data = {"a": [1,2,3,4], "b": ["a-b", "c-d", "e-f", "g-h"]})

Скажем, я хочу создать новый столбец с именем c, который будет первой буквой в каждой строке b, я хочу преобразовать b, удалив«-», и я хочу создать еще один столбец с именем d, который будет первой буквой b, объединенной с записью в a в той же строке.Прямо сейчас я должен был бы сделать что-то вроде этого:

ex_df["b"] = ex_df["b"].map(lambda x: "".join(x.split(sep="-")))
ex_df["c"] = ex_df["b"].map(lambda x: x[0])
ex_df["d"] = ex_df.apply(func=lambda s: s["c"] + str(s["a"]), axis=1)
ex_df
#   a   b   c   d
#0  1   ab  a   a1
#1  2   cd  c   c2
#2  3   ef  e   e3
#3  4   gh  g   g4

Исходя из R data.table background (который объединит все эти операции в один оператор), мне интересно, как все это делается впанды.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вы можете использовать:

In [12]: ex_df.assign(
    ...:     b=ex_df.b.str.replace('-', ''),
    ...:     c=ex_df.b.str[0],
    ...:     d=ex_df.b.str[0] + ex_df.a.astype(str)
    ...: )
Out[12]: 
   a   b  c   d
0  1  ab  a  a1
1  2  cd  c  c2
2  3  ef  e  e3
3  4  gh  g  g4
0 голосов
/ 21 мая 2018

Это один подход.

Демонстрация:

import pandas as pd
ex_df = pd.DataFrame(data = {"a": [1,2,3,4], "b": ["a-b", "c-d", "e-f", "g-h"]})
ex_df["c"] = ex_df["b"].str[0]
ex_df["b"] = ex_df["b"].str.replace("-", "")
ex_df["d"] = ex_df.apply(lambda s: s["c"] + str(s["a"])), axis=1)
print(ex_df)

Вывод:

   a   b  c   d
0  1  ab  a  a1
1  2  cd  c  c2
2  3  ef  e  e3
3  4  gh  g  g4

Вы можетеиспользуйте метод build in str, чтобы получить требуемый вывод.

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