panda

2016-03-21 26 views
3
Örneğin

benpanda

[ 2 2 2 
    3 3 3 
    4 4 4 
    5 5 5] 

gibi dataframe ve bir serise sahip dataframe ve seri (kolon) ile çarpma [2 1 2 1] I

[ 4 4 4 
    3 3 3 
    8 8 8 
    5 5 5] 
elde nasıl

?

cevap

2

Sen mul deneyebilir ve dönüştürmek gerekirse DataFramevalues kullanım numpy array için:

print df 
    0 1 2 
0 2 2 2 
1 3 3 3 
2 4 4 4 
3 5 5 5 

s = pd.Series([2, 1, 2, 1]) 
print s 
0 2 
1 1 
2 2 
3 1 
dtype: int64 

print df.mul(s, axis=0) 
    0 1 2 
0 4 4 4 
1 3 3 3 
2 8 8 8 
3 5 5 5 

print df.mul(s, axis=0).values 
[[4 4 4] 
[3 3 3] 
[8 8 8] 
[5 5 5]] 
+0

Çok teşekkürler. Bu benim için mükemmel çalışıyor. –

+0

Daha temiz bir şekilde. –

1

Sen numpy broadcasting kullanarak bunu yapabilir:

In [36]: df.values 
Out[36]: 
array([[2, 2, 2], 
     [3, 3, 3], 
     [4, 4, 4], 
     [5, 5, 5]], dtype=int64) 

In [37]: s.values 
Out[37]: array([2, 1, 2, 1], dtype=int64) 

In [38]: df.values * s.values[:,None] 
Out[38]: 
array([[4, 4, 4], 
     [3, 3, 3], 
     [8, 8, 8], 
     [5, 5, 5]], dtype=int64) 

Zamanlama:

In [44]: %timeit df.mul(s, axis=0) 
1000 loops, best of 3: 197 us per loop 

In [45]: %timeit df.mul(s, axis=0).values 
1000 loops, best of 3: 210 us per loop 

In [46]: %timeit df.values * s.values[:,None] 
100000 loops, best of 3: 16.4 us per loop 

In [48]: %timeit pd.DataFrame(df.values * s.values[:,None]) 
10000 loops, best of 3: 164 us per loop 
+0

Sayısal yöntemi sunmak için çok teşekkürler. –

İlgili konular