当前位置: 首页 > 知识库问答 >
问题:

蟒蛇2。7:更改dataframe列值的差异

嵇丰
2023-03-14

我有一个数据帧(df),如下所示(仅为示例),可能有10个或更多数据帧:

     date              a       b
  0     2010-01-01     12      15
  1     2010-01-02     13      20
  2     2010-01-03     14      23
  3     2010-01-04     15      24
  4     2010-01-05     16      25
  5     2010-01-08     17      15
  6     2010-01-09     180     160
  ................................
  1000     2013-01-05     310     320

我想计算数据框中b列值的变化百分比。但是有一个例外,当日期是'2010-01-09'(只是一个例子),并计算b'2010-01-09'的变化百分比,b在'2010-01-08'中的值应该是10倍,就这一次,其他日期应该使用原始值,我的意思是没有10倍。一般来说,我通过以下代码计算变化百分比:

df['b_diff'] = df2['b']/(df2['b'].shift() -1

但是当日期是:'2010-01-09'。我想代码应该是:

 df['b_diff'] = df2['b']/10*(df2['b'].shift()) -1 

你能告诉我如何处理这个问题吗?

谢谢

共有1个答案

杜元明
2023-03-14

您可以使用pct\u change,但首先将b的值除以条件:

dates = ['2010-01-09','2011-01-09']
m = df2['date'].isin(dates)
df2.loc[m, 'b'] =  df2['b'] / 10

df2['b_diff'] = df2['b'].pct_change()
print (df2)
        date    a     b    b_diff
0 2010-01-01   12  15.0       NaN
1 2010-01-02   13  20.0  0.333333
2 2010-01-03   14  23.0  0.150000
3 2010-01-04   15  24.0  0.043478
4 2010-01-05   16  25.0  0.041667
5 2010-01-08   17  15.0 -0.400000
6 2010-01-09  180  16.0  0.066667

替代解决方案:

dates = ['2010-01-09','2011-01-09']
m = df2['date'].isin(dates)

df2['b'] = df2['b'].mask(m, df2['b'] / 10)
df2['b_diff'] = df2['b'].pct_change()
print (df2)
        date    a     b    b_diff
0 2010-01-01   12  15.0       NaN
1 2010-01-02   13  20.0  0.333333
2 2010-01-03   14  23.0  0.150000
3 2010-01-04   15  24.0  0.043478
4 2010-01-05   16  25.0  0.041667
5 2010-01-08   17  15.0 -0.400000
6 2010-01-09  180  16.0  0.066667
 类似资料:
  • 我已经安装了Anaconda并创建了两个额外的环境:py3k(包含Python 3.3)和py34(包含Python 3.4)。除此之外,我还有一个名为“root”的默认环境,它是Anaconda安装程序默认创建的,包含Python 2.7。这最后一个是默认的,每当我从终端启动“ipython”时,它给我的版本是2.7。为了使用Python 3.4,我需要发出命令(在shell中) 这将默认环境更

  • 根据本文,我正在学习使用来控制windows10powershell中的python环境。 它表示当前环境应显示括号或括号 你现在使用的环境是雪花还是兔子?要找到答案,请键入相同的命令: 康达信息- envs Conda显示所有环境的列表,当前环境显示在提示符前面的(括号)或[方括号]中: (雪花) 注意:conda还会在您的环境列表中的活动环境前面加一个星号(*);请参见上面的“列出所有环境”

  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现

  • 我需要在我的中添加一个新的目录位置,但问题是我使用的是一个全新安装的系统(Linux),其中尚未定义任何。我读过并使用过,我认为我很了解它,但我不知道当没有存在时会发生什么。 我不能附加到不存在的东西上,但我希望当前发现的所有重要库都能正常工作,因此要小心,我在Python中使用了来获取所有标准值。然后我为定义了一个-变量,包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!P