Python Pandas - n X m DataFrame 乘以 1 X m Dataframe
Python Pandas - n X m DataFrame multiplied by 1 X m Dataframe
我正在尝试将 10X7 Pandas 数据帧乘以 Python 中的 1X7 数据帧。
这是我的:
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
的所有行乘以 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中有没有简单的方法来实现这个乘法?
如果你想按行进行乘法,你可以试试这个:
%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
像这样:
%%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
我正在尝试将 10X7 Pandas 数据帧乘以 Python 中的 1X7 数据帧。
这是我的:
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
的所有行乘以 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中有没有简单的方法来实现这个乘法?
如果你想按行进行乘法,你可以试试这个:
%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
像这样:
%%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