【问题标题】:Python Pandas - n X m DataFrame multiplied by 1 X m DataframePython Pandas - n X m DataFrame 乘以 1 X m DataFrame
【发布时间】:2015-05-31 23:56:10
【问题描述】:

我正在尝试将 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 中实现这种乘法?

【问题讨论】:

    标签: python-2.7 pandas multiple-columns


    【解决方案1】:

    像这样:

    %%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

    【讨论】:

    • 谢谢。我在 Pandas 文档中寻找类似的东西,但我找不到。很好的答案!
    【解决方案2】:

    如果你想逐行做乘法,你可以试试这个:

    %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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多