为了账号安全,请及时绑定邮箱和手机立即绑定

复制和替换 Pandas 单元格值

复制和替换 Pandas 单元格值

达令说 2023-06-06 16:17:53
是否可以在 Pandas 列中获取给定值并将其更改为前一行值?例如,我有这个数据框:Date        Price   Signal2018-01-01  13380.00    12018-01-02  14675.11    02018-01-03  14919.51    02018-01-04  15059.54    02018-01-05  16960.39    02018-01-06  17069.79    -12018-01-07  16150.03    02018-01-08  14902.54    02018-01-09  14400.00    12018-01-10  14907.09    02018-01-11  13238.78    02018-01-12  13740.01    -12018-01-13  14210.00    0我想将信号列中的零替换为 1 或 -1。最终的DF应该是这样的:Date        Price   Signal2018-01-01  13380.00    12018-01-02  14675.11    12018-01-03  14919.51    12018-01-04  15059.54    12018-01-05  16960.39    12018-01-06  17069.79    -12018-01-07  16150.03    -12018-01-08  14902.54    -12018-01-09  14400.00    12018-01-10  14907.09    12018-01-11  13238.78    12018-01-12  13740.01    -12018-01-13  14210.00    -1
查看完整描述

3 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

尝试这个:

df['Signal'].replace(to_replace=0, method='ffill')

(假设你的 DataFrame 被称为 df)


查看完整回答
反对 回复 2023-06-06
?
MM们

TA贡献1886条经验 获得超2个赞

import pandas as pd

准备数据框

如果你有一个数据框:

df = pd.DataFrame([1,0,1,0,1], columns=['col1'])

//img3.sycdn.imooc.com/647eebce00018d9600740162.jpg

使用纯 apply()

你可以做:

def replace(num): 
   if num==1: return 1
    if num==0: return -1

然后将其应用于包含要替换的值的列:

df['new']=df['col1'].apply(replace)

apply() lambda 函数

您可以使用lambda 函数实现相同的目的:

df['col1'].apply(lambda row: 1 if row == 1 else -1)

使用内置方法

使用我们准备的数据框,可以做:

df['new'] = df['col1'].replace(to_replace=0, value=-1)

如果您不想创建新列,只需直接替换现有列中的值,就地进行即可:

df['col1'].replace(to_replace=0, value=-1,inplace=True)

清理

如果创建了一个列并且不想保留列,可以将其删除:

df.drop('col1',axis=1)


查看完整回答
反对 回复 2023-06-06
?
白板的微信

TA贡献1883条经验 获得超3个赞

如果您想要将以前的值传播到下一行,请使用以下命令:

df["Signal"] = df["Signal"].ffill()


查看完整回答
反对 回复 2023-06-06
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信