Pandas: разделение столбца по разделителю и изменение порядка расположения на основе других столбцов - PullRequest
2 голосов
/ 12 июля 2020

Пусть df будет фреймом данных.

In [1]: import pandas as pd
   ...: df = pd.DataFrame(columns = ['Home', 'Score', 'Away'])
   ...: df.loc[0] = ['Team A', '3-1', 'Team B']
   ...: df.loc[1] = ['Team B', '2-1', 'Team A']
   ...: df.loc[2] = ['Team B', '2-2', 'Team A']
   ...: df.loc[3] = ['Team A', '0-1', 'Team B']

In [2]: df
Out[2]:
     Home Score    Away
0  Team A   3-1  Team B
1  Team B   2-1  Team A
2  Team B   2-2  Team A
3  Team A   0-1  Team B

Я хочу сделать df_1 из df.

In [4]: df_1
Out[4]:
  Team A Team B
0      3      1
1      1      2
2      2      2
3      0      1

Какой самый простой способ?

Как новичок, я могу разделить столбец 'Score' на два столбца, а затем l oop по другим столбцам и получить df_1, но я думаю, что должен быть более простой способ сделать это, вероятно с функцией lambda или методом group_by.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Вы можете попробовать это:

df["values"] = df.apply(lambda row: {row["Home"]:row["Score"].split("-")[0], row["Away"]:row["Score"].split("-")[1]}, axis=1)

output_df = pd.DataFrame(df["values"].tolist())

Вывод:

    Team A  Team B
0   3   1
1   1   2
2   2   2
3   0   1
1 голос
/ 12 июля 2020

Если это всего две команды, мы можем при необходимости вернуть счет.

Где работает следующим образом, если условие истинно, оно сохраняет исходное значение. Если нет, он может вызвать входное значение из списка значений. Наше условие - в команде, а преобразователь - это разворот строки.

l_rev_string = lambda s: s[::-1]

df_score_rev = df.Score.apply(l_rev_string)

df1 = df.Score.where(df.Home == 'Team A', df_score_rev)\
    .str.split('-',expand=True)\
    .rename(columns = {0:'Team A',1:'Team B'})


|    |   Team A |   Team B |
|---:|---------:|---------:|
|  0 |        3 |        1 |
|  1 |        1 |        2 |
|  2 |        2 |        2 |
|  3 |        0 |        1 |

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