2016-09-09 3 views
2

Учитывая эти данные:Макс панд колонн dataframe перемножать

data = {'C1_IND' : [1,1,0,0,1], 
     'C1_PRICE' : [55,84,0,0,103], 
     'P1_IND' : [1,0,0,1,1], 
     'P1_PRICE' : [72,0,0,33,95]} 
df = pd.DataFrame(data) 

Как я могу создать переменную в том же dataframe, который:

max(C1_IND*C1_PRICE,P1_IND*P1_PRICE) 

Кроме того, будут ли какие-либо вопросы, если есть являются нулями в этих данных?

+0

Когда вы говорите 'макс (C1_IND * C1_PRICE, P1_IND * P1_PRICE) 'как они умножаются по строкам или по столбцам? – EdChum

ответ

3

Думаю, вы можете выбрать столбцы на filter, затем несколько на prod. Последняя применяется max:

a = df.filter(like='C1').prod(1) 
b = df.filter(like='P1').prod(1) 
df['max'] = pd.DataFrame({'a':a,'b':b}).max(1) 
print (df) 
    C1_IND C1_PRICE P1_IND P1_PRICE max 
0  1  55  1  72 72 
1  1  84  0   0 84 
2  0   0  0   0 0 
3  0   0  1  33 33 
4  1  103  1  95 103 

Или:

df['a'] = df.filter(like='C1').prod(1) 
df['b'] = df.filter(like='P1').prod(1) 
df['max'] = df[['a','b']].max(1) 
df = df.drop(['a','b'], axis=1) 
print (df) 
    C1_IND C1_PRICE P1_IND P1_PRICE max 
0  1  55  1  72 72 
1  1  84  0   0 84 
2  0   0  0   0 0 
3  0   0  1  33 33 
4  1  103  1  95 103 

Он работает с NaN также, но добавить параметр skipna=False в prod:

data = {'C1_IND' : [1,1,0,0,1], 
     'C1_PRICE' : [55,84,0,0,8], 
     'P1_IND' : [1,0,0,1,10], 
     'P1_PRICE' : [72,0,0,33,np.nan]} 
df = pd.DataFrame(data) 

print (df) 
    C1_IND C1_PRICE P1_IND P1_PRICE 
0  1  55  1  72.0 
1  1  84  0  0.0 
2  0   0  0  0.0 
3  0   0  1  33.0 
4  1   8  10  NaN 

a = df.filter(like='C1').prod(1, skipna=False) 
b = df.filter(like='P1').prod(1, skipna=False) 

print (pd.DataFrame({'a':a,'b':b})) 
    a  b 
0 55 72.0 
1 84 0.0 
2 0 0.0 
3 0 33.0 
4 8 NaN 

df['max'] = pd.DataFrame({'a':a,'b':b}).max(1) 
print (df) 
    C1_IND C1_PRICE P1_IND P1_PRICE max 
0  1  55  1  72.0 72.0 
1  1  84  0  0.0 84.0 
2  0   0  0  0.0 0.0 
3  0   0  1  33.0 33.0 
4  1   8  10  NaN 8.0 
Смежные вопросы