根据列表创建“ 0-1”列

时间:2019-03-11 20:39:28

标签: python pandas matplotlib seaborn

让我们说这是我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)添加新列后,我要创建一个重新绘制:

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

我想知道是否有一种快速的方法可以基于我的列表在这样的绘图上添加注释(可以是在右圆点上方的简单注释,没有箭头),或者在Python中是不可能的(在R中非常简单),我必须 根据需要创建尽可能多的plt.annotate

2 个答案:

答案 0 :(得分:0)

对于第一个问题,可以将三元数与np.whereisin一起使用:

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

另一种选择:

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

答案 1 :(得分:0)

此处带有注释:

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)

注意:

请参见How to implement 'in' and 'not in' for Pandas dataframe,了解有关如何在DataFrames中进行in/not in的详细信息