2016-03-21 15 views

Antwort

2

Sie können mul versuchen und wenn Sie DataFrame zu numpy array Verwendung values konvertieren müssen:

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

Vielen Dank. Das funktioniert perfekt für mich. –

+0

der sauberere Weg. –

1

könnten Sie tun das, numpy broadcasting mit:

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) 

Timing:

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

Vielen Dank für das Angebot der numpy Methode. –

Verwandte Themen