Создание столбца «0-1» на основе списка - PullRequest
0 голосов
/ 11 марта 2019

Допустим, это глава моего df:

   Team     Win_pct_1 Win_pct_2  
0  Memphis     0.6        0.5
1  Miami       0.4        0.6
2  Phoenix     0.7        0.4
3  Dallas      0.6        0.3
4  Boston      0.4        0.1

Я создал список команд, например:

list = ['Miami','Dallas']

1) Затем я хочу добавить столбецна мой DF на основе этого списка.Если df['Team'] находится в списке, в новом столбце будет показано 1, иначе 0. Итак, в конце я получу что-то вроде:

   Team     Win_pct_1 Win_pct_2 New_column
0  Memphis     0.6        0.5      0
1  Miami       0.4        0.6      1
2  Phoenix     0.7        0.4      0
3  Dallas      0.6        0.3      1
4  Boston      0.4        0.1      0

Я думал об использовании for index, row in df.iterrows(): или if df.Team.isin(list), ноЯ не знаю, как заставить это работать.

2) После добавления нового столбца я хочу создать relplot:

sns.relplot(data=df,
           x='Win_pct_1',
           y='Win_pct_2',
           hue='New_column')

И я хотел бы знать, существует ли быстрый способ добавления аннотаций к такому графику на основемой список (это могут быть простые аннотации чуть выше правой точки, без стрелок) или это невозможно в Python (в R это довольно просто), и мне нужно создать столько plt.annotate, сколько необходимо.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Вот с аннотациями:

df['New_column'] = df['Team'].isin(list).astype(int)

fig, ax = plt.subplots(1, figsize=(8,8))

sns.set_style('whitegrid')
p1 = sns.scatterplot(data=df,
           x='Win_pct_1',
           y='Win_pct_2',
           hue='New_column')

p1.set_xlim(0,1)
p1.set_ylim(0,1)

for i in df.index:
    p1.text(df.at[i, 'Win_pct_1'] + .01,
            df.at[i, 'Win_pct_2'] + .01,
            df.at[i, 'Team'],
            horizontalalignment='left',
            size='medium',
            color='black')

Выход:

output

Обновление:

Только для выбранных команд из списка:

df['New_column'] = df['Team'].isin(list).astype(int)

fig, ax = plt.subplots(1, figsize=(8,8))

sns.set_style('whitegrid')
p1 = sns.scatterplot(data=df[df['New_column']==1],
           x='Win_pct_1',
           y='Win_pct_2',
           hue='New_column')

p1.set_xlim(0,1)
p1.set_ylim(0,1)

for i in df[df['New_column']==1].index:
    p1.text(df.at[i, 'Win_pct_1'] + .01,
            df.at[i, 'Win_pct_2'] + .01,
            df.at[i, 'Team'],
            horizontalalignment='left',
            size='medium',
            color='black')

Выход:

output(2)

Примечание:

Пожалуйста, смотрите Как реализовать 'in' и 'not in' для Pandas dataframe для более подробной информации о том, как сделать in/not in в DataFrames

0 голосов
/ 11 марта 2019

В качестве первого вопроса вы можете использовать троичную комбинацию с np.where и isin:

df['New_column'] = np.where(df['Team'].isin(my_list), 1, 0)

Другая альтернатива:

df['New_column'] = df['Team'].isin(my_list).astype(int)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...