【问题标题】:Update dataframe with hierarchical index使用分层索引更新数据框
【发布时间】:2017-03-16 11:28:50
【问题描述】:

我有一个看起来像这样的数据系列

Component  Date  Sev         Counts
PS         2009  3            4
                 4            1
           2010  1            2
                 3            2
                 4            1
           2011  2            3
                 3            5
                 4            1
           2012  1            1
                 2            5
                 3            7
           2013  2            4
                 3            9
           2014  1            2
                 2            3
                 3            4
           2015  1            2
                 2          100
                 3           31
                 4           31
           2016  1           44
                 2           27
                 3           45
Name: Alarm Name, dtype: int64

我有一个向量,每年给出一定的数量

        Number
Date    
2009-12-31  8.0
2010-12-31  3.0
2011-12-31  13.0
2012-12-31  2.0
2013-12-31  3.0
2014-12-31  4.0
2015-12-31  6.0
2016-12-31  71.0

我想使用我的向量 = 计数/数字的除法对系列中的计数进行除法。我还想用更新后的数字获取我的原始数据框。

这是我的代码

count=0
for i in df3.index.year:

    df2.ix['PS'].ix[i].apply(lambda x:  x /float(df3.iloc[count]))
    count = count + 1 

但是我的数据框 df2 没有改变。请任何提示。谢谢。

【问题讨论】:

  • 您能否提供一个我们可以在 python 中复制的数据框,以便我们轻松为您提供帮助。回答这个问题是直截了当的,但是重新创建您的初始数据框需要时间,您应该很容易给我们 df = pd.DataFrame() 您 df 的可粘贴示例。
  • 我怎样才能把数据框传给你?我正在使用的那个是发布在问题上的那个。

标签: python pandas dataframe indexing apply


【解决方案1】:

我认为您需要除以divNumber,但首先将dfindex 转换为years:

df.index = df.index.year
s = s.div(df.Number, level=1)
print (s)

Component  Date  Sev Counts
PS         2009  3              0.500000
                 4              0.125000
           2010  1              0.666667
                 3              0.666667
                 4              0.333333
           2011  2              0.230769
                 3              0.384615
                 4              0.076923
           2012  1              0.500000
                 2              2.500000
                 3              3.500000
           2013  2              1.333333
                 3              3.000000
           2014  1              0.500000
                 2              0.750000
                 3              1.000000
           2015  1              0.333333
                 2             16.666667
                 3              5.166667
                 4              5.166667
           2016  1              0.619718
                 2              0.380282
                 3              0.633803
dtype: float64

【讨论】:

  • 我按照你说的做得到 NaN 数:df2.ix['PS'] = df2.ix['PS'].div(df3.Number,level=1)
  • 还有什么问题?
  • 我修好了! df2.ix['PS'] 没有必要,因为我们在除法函数中使用了 level=1 选项。非常感谢!!
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2019-11-17
  • 2023-04-09
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多