Форматирование строк с использованием множества столбцов pandas для создания нового - PullRequest
2 голосов
/ 31 марта 2020

Я хотел бы создать новые столбцы в pandas DataFrame точно так же, как я бы использовал python f-Strings или функцию форматирования. Вот пример:

df = pd.DataFrame({"str": ["a", "b", "c", "d", "e"],
                   "int": [1, 2, 3, 4, 5]})

print(df)

  str  int
0   a    1
1   b    2
2   c    3
3   d    4
4   e    5

Я хотел бы получить:

  str  int concat
0   a    1   a-01
1   b    2   b-02
2   c    3   c-03
3   d    4   d-04
4   e    5   e-05

Так что-то вроде:

concat = f"{str}-{int:02d}"

, но напрямую с элементами pandas колонны. Я полагаю, что решение использует pandas map, apply, agg, но ничего не получилось.

Большое спасибо за вашу помощь.

Ответы [ 4 ]

3 голосов
/ 31 марта 2020

Используйте понимание lsit с f-string s:

df['concat'] = [f"{a}-{b:02d}" for a, b in zip(df['str'], df['int'])]

Или возможно использование apply:

df['concat'] = df.apply(lambda x: f"{x['str']}-{x['int']:02d}", axis=1)

Или решение из комментариев с Series.str.zfill:

df["concat"] = df["str"] + "-" + df["int"].astype(str).str.zfill(2)

print (df)
  str  int concat
0   a    1   a-01
1   b    2   b-02
2   c    3   c-03
3   d    4   d-04
4   e    5   e-05
0 голосов
/ 31 марта 2020

Вы можете использовать pandas ' объединение строк метод:

df['concat'] = df['str'].str.cat(df['int'].astype(str),sep='-0')

    str int concat
0   a   1   a-01
1   b   2   b-02
2   c   3   c-03
3   d   4   d-04
4   e   5   e-05
0 голосов
/ 31 марта 2020

Я также только что обнаружил, что индексирование массива работает по столбцам DataFrame

df["concat"] = df.apply(lambda x: f"{x[0]}-{x[1]:02d}", axis=1)

print(df)

  str  int concat
0   a    1   a-01
1   b    2   b-02
2   c    3   c-03
3   d    4   d-04
4   e    5   e-05

выглядит очень гладко

0 голосов
/ 31 марта 2020

Вы можете использовать список для построения столбца concat:

import pandas as pd

df = pd.DataFrame({"str": ["a", "b", "c", "d", "e"],
                   "int": [1, 2, 3, 4, 5]})

df['concat'] = [f"{s}-{i:02d}" for s, i in df[['str', 'int']].values]

print(df)

Выход

  str  int concat
0   a    1   a-01
1   b    2   b-02
2   c    3   c-03
3   d    4   d-04
4   e    5   e-05
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...