在熊猫中有条件地用行值填充列

时间:2019-11-02 23:25:37

标签: python pandas dataframe

我有一个用那里的名字表示的男女工人的工资数据集。

 Male     Female    Male_Wage  Female_Wage
 James     Lori        8            9
 Mike      Nancy       10           8
 Ron       Cathy       11           12
 Jon       Ruth        15           9
 Jason     Jackie      10           10

在熊猫中,我想在数据框中创建一个新列,以显示收入最高的人员的姓名。如果存在双方支付相同的条件,则该值应为Same。

     Male     Female    Male_Wage  Female_Wage  Highest_Paid
     James     Lori        8            9          Lori
     Mike      Nancy       10           8          Mike
     Ron       Cathy       11           12         Cathy
     Jon       Ruth        15           9          Jon
     Jason     Jackie      10           10         Same

我已经能够添加一列并为其填充值,基于其他列等计算值,但是无法根据实例中条件相同的另一列的值有条件地填充新列工资都一样给我带来麻烦。我已经搜索了相当多的答案,却没有发现任何涵盖这种情况所有要素的内容。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

方法1:np.select

我们可以指定条件,并根据这些条件获得MaleFemale的值,否则获得default='Same'

conditions = [
    df['Male_Wage'] > df['Female_Wage'],
    df['Female_Wage'] > df['Male_Wage']
]

choices = [df['Male'], df['Female']]

df['Highest_Paid'] = np.select(conditions, choices, default='Same')

    Male  Female  Male_Wage  Female_Wage Highest_Paid
0  James    Lori          8            9         Lori
1   Mike   Nancy         10            8         Mike
2    Ron   Cathy         11           12        Cathy
3    Jon    Ruth         15            9          Jon
4  Jason  Jackie         10           10         Same

方法2:np.where + loc

使用np.where.loc有条件地分配正确的值:

df['Highest_Paid'] = np.where(df['Male_Wage'] > df['Female_Wage'], 
                              df['Male'], 
                              df['Female'])

df.loc[df['Male_Wage'] == df['Female_Wage'], 'Highest_Paid'] = 'Same'

    Male  Female  Male_Wage  Female_Wage Highest_Paid
0  James    Lori          8            9         Lori
1   Mike   Nancy         10            8         Mike
2    Ron   Cathy         11           12        Cathy
3    Jon    Ruth         15            9          Jon
4  Jason  Jackie         10           10         Same

答案 1 :(得分:0)

您可以使用import seaborn import spacy dots = seaborn.load_dataset("dots") dots.head() 语句

loc