基于lis创建“01”列

2024-04-26 12:19:11 发布

您现在位置:Python中文网/ 问答频道 /正文

假设这是我的国防部长:

   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。你知道吗


Tags: df列表newcolumnbostonwinteamlist
2条回答

以下是注释:

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的详细信息,请参见How to implement 'in' and 'not in' for Pandas dataframe

对于第一个问题,可以使用带np.whereisin的三元数:

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

另一种选择:

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

相关问题 更多 >