【问题标题】:Normalize each column of a pandas DataFrame规范化 pandas DataFrame 的每一列
【发布时间】:2014-11-03 19:16:10
【问题描述】:

Dataframe 的每一列都需要根据该列中第一个元素的值对其值进行规范化。

for timestamp, prices in data.iteritems():
    normalizedPrices = prices / prices[0]
    print normalizedPrices     # how do we update the DataFrame with this Series?

但是,一旦我们创建了规范化的数据列,我们如何更新 DataFrame?我相信如果我们这样做prices = normalizedPrices,我们只是在对 DataFrame 的副本/视图而不是原始 DataFrame 本身进行操作。

【问题讨论】:

  • 旁注:根据@unutbu 的回答,最好的解决方案是循环遍历数据帧的行是非常罕见的
  • @PaulH 如我所见,代码循环遍历数据框的列(而不是行)。

标签: python python-2.7 pandas dataframe


【解决方案1】:

一次性标准化整个 DataFrame 可能是最简单的(并避免完全循环遍历行/列):

>>> df = pd.DataFrame({'a': [2, 4, 5], 'b': [3, 9, 4]}, dtype=np.float) # a DataFrame
>>> df
   a  b
0  2  3
1  4  9
2  5  4

>>> df = df.div(df.loc[0]) # normalise DataFrame and bind back to df
>>> df
     a         b
0  1.0  1.000000
1  2.0  3.000000
2  2.5  1.333333

【讨论】:

    【解决方案2】:

    分配给data[col]:

    for col in data:
        data[col] /= data[col].iloc[0]
    

    【讨论】:

      【解决方案3】:
      import numpy
      
      data[0:] = data[0:].values/data[0:1].values 
      

      【讨论】:

        猜你喜欢
        • 2012-08-21
        • 2019-03-15
        • 1970-01-01
        • 2018-05-18
        • 2013-09-06
        • 2018-09-15
        • 2019-06-13
        • 2020-12-11
        • 1970-01-01
        相关资源
        最近更新 更多