2016-02-16 3 views
7

Я пытаюсь добавить столбец к моей DataFrame, который является продуктом деления двух других столбцов, например, так:питона панды - разделительные колонки на другой колонке

df['$/hour'] = df['$']/df['hours'] 

Это работает отлично, но если значение в ['hours'] составляет менее 1, то значение ['$/hour'] больше, чем значение в ['$'], что не то, что я хочу.

Есть ли способ контролировать операцию, чтобы, если ['hours'] < 1, то df['$/hour'] = df['$']?

ответ

6

Вы можете использовать numpy.where:

print df 
    hours $ 
0  0 8 
1  0 9 
2  0 9 
3  3 6 
4  6 4 
5  3 7 
6  5 5 
7  10 1 
8  9 3 
9  3 6 
10  5 4 
11  5 7 

df['$/hour'] = np.where(df['hours'] < 1, df['hours'], df['$']/df['hours']) 
print df 
    hours $ $/hour 
0  0 8 0.000000 
1  0 9 0.000000 
2  0 9 0.000000 
3  3 6 2.000000 
4  6 4 0.666667 
5  3 7 2.333333 
6  5 5 1.000000 
7  10 1 0.100000 
8  9 3 0.333333 
9  3 6 2.000000 
10  5 4 0.800000 
11  5 7 1.400000 
+0

Это идеальный вариант, спасибо! – Charon

1
df['$/hour'] = df.apply(lambda x: x['$'] if x['$'] < 1 else x['$']/x['hours'], axis=1) 
3

Вы также можете фильтровать и выбирать индексы для установки с DataFrame.loc:

df['$/hour'].loc[df['hours']>=1] = df['$']/df['hours'] 
df['$/hour'].loc[df['hours']<1] = df['$'] 
Смежные вопросы