Как разделить содержимое одного столбца данных Pandas на несколько новых столбцов - PullRequest
1 голос
/ 11 апреля 2020

Допустим, у меня есть данные записей двух спортивных команд.

d = {'Team': [1, 2], 'Record': ['5-0', '3-2']}
df = pd.DataFrame(data=d)
df

    Team    Record
0     1      5-0
1     2      3-2

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

d = {'Team': [1, 2], 'Record': ['5-0', '3-2'], 'Wins': [5, 3], 'Losses' : [0, 2]}
df = pd.DataFrame(data=d)
df


  Team  Record  Wins    Losses
0   1    5-0     5         0
1   2    3-2     3         2

Данные в столбце «Записи» являются объектами из-за дефиса.

(df.dtypes)

Team       int64
Record    object
dtype: object

Как бы я go сделал это? Будет ли это какое-то регулярное выражение, а затем понимание списка go в каждой строке столбца Записи? Я хотел бы сделать это для около 400 команд в кадре данных. Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Если данные достаточно хорошо себя ведут, вы можете использовать Series.str.extract с именованными группами захвата (Number)-(Number). Потом конкат назад.

pd.concat([df, df['Record'].str.extract(r'(?P<Wins>\d)-(?P<Losses>\d)')], axis=1)
#   Team Record Wins Losses
#0     1    5-0    5      0
#1     2    3-2    3      2
1 голос
/ 11 апреля 2020

использовать pandas строковые методы, в частности, str split и str get , а назначать извлечения для новых столбцов:

    df = (df
         .assign(Wins= df.Record.str.split('-').str.get(0),
                 Losses = df.Record.str.split('-').str.get(-1)
            )
          )

df


  Team  Record  Wins    Losses
0   1    5-0     5         0
1   2    3-2     3         2
...