2015-05-31 2 views
2

Я пытаюсь размножить 10X7-фрейм данных Pandas с помощью 1X7-кадра данных в Python.Python Pandas - n X m DataFrame, умноженное на 1 X m Dataframe

Вот что у меня есть:

df = pd.DataFrame(np.random.rand(10,7),columns=list('ABCDEFG')) 
df_1 = pd.DataFrame(np.random.rand(1,7),columns=list('ABCDEFG')) 

Я попытался это:

df_prod = pd.DataFrame(columns=df) 
for i in range(0, df.shape[0]): 
    df_prod.iloc[i,:] = df[i,:].tolist()*df_1.iloc[0,:].tolist() 

Но я получаю сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Python27\test.py", line 29, in <module> 
    df_elem.iloc[i,:] = df_val[i,:].tolist()*df_cf.iloc[0,:].tolist() 
    File "C:\python27\lib\site-packages\pandas\core\frame.py", line 1678, in __getitem__ 
    return self._getitem_column(key) 
    File "C:\python27\lib\site-packages\pandas\core\frame.py", line 1685, in _getitem_column 
    return self._get_item_cache(key) 
    File "C:\python27\lib\site-packages\pandas\core\generic.py", line 1050, in _get_item_cache 
    res = cache.get(item) 
TypeError: unhashable type 

Мне нужно умножить все строки df by df_1.

мне нужно:

df.iloc[0,:] * df_1 
df.iloc[1,:] * df_1 
df.iloc[2,:] * df_1 
df.iloc[3,:] * df_1 
. 
. 
. 
. 
df.iloc[9,:] * df_1 

Есть простой способ добиться этого умножения это в Python?

ответ

1

Если вы хотите сделать умножение рядами, вы можете попробовать это:

%timeit df_prod = df.apply(lambda x: x * df_1.ix[0],axis = 1) 
100 loops, best of 3: 6.21 ms per loop 

однако это будет гораздо быстрее сделать умножение столбцов:

%timeit = df_prod = pd.DataFrame({c:df[c]* df_1[c].ix[0] for c in df.columns}) 
100 loops, best of 3: 2.4 ms per loop 
3

вроде этого:

%%timeit 
df.mul(df_1.ix[0]) 
1000 loops, best of 3: 251 µs per loop 

проверки результатов матча:

all(df.mul(df_1.ix[0]) == df.apply(lambda x: x * df_1.ix[0],axis = 1)) 
True 

Этого можно избежать. Link to docs

+0

спасибо. Я искал что-то подобное в документации Pandas, но я не мог найти его. Отличный ответ! –

Смежные вопросы