python存储新值

2024-04-18 07:47:57 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我是python编程的新手,我还在学习。 我想问我有一个csv数据,其中有5列(TC,TD,TG,P,CTTR)。我想为CTTR列存储新值。你知道吗

CTTR柱的新公式为

enter image description here

我是电话号码。你知道吗

但我不知道如何将公式写入python。 我知道如何获得原始CTTR值作为熊猫的输入。你知道吗

import pandas as pd

data_df = pd.read_csv("output1.csv")

cttr = data_df['CTTR']

print cttr

我有12行,我希望输出有相同的输入行数。如果索引[0],则cttr[i-2]和cttr[i-1]的值将为==0,当索引[11]时,cttr[i+2]和cttrs[i+1]的值将为==0。然后我想用CTTR到csv的新值替换CTTR的原始值。你知道吗

原始CTTR值

0
2
2
23
18
28
27
58
41
12
35
20

我期望的结果

0.6------> (0 + 2*0 + 4*0 + 2*2 + 2)/10 
3.5 -----> (0 + 2*0 +4*2 +2*2 + 23)/10
7.6
16.2
20.3
28.3
33.9
40.8
36.6
27.8
24.5-----> (41 + 2*12 + 4*35 + 2*20 + 0)/10
16.2-----> (12 + 2*35 + 4*20 +2*0 + 0)/10

谢谢你!你知道吗


Tags: csv数据dfdata编程电话号码tg公式
1条回答
网友
1楼 · 发布于 2024-04-18 07:47:57

你不太清楚你想要的结果,但有一种方法可以做到:

vals = df.CTTR.values

np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.

也就是说,基本上你正在实现一个加权的滚动平均值,我确信已经有了一个实现(也许看看熊猫^{}

如果要在第一个/最后一个位置设置零,则可以执行以下操作:

np.append(np.append([0,0],np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.),[0,0])

虽然这有点不方便,但您可能希望将其封装在如下函数中:

def calc_new_cttr(series):
    vals = series.values
    cttrs = np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.
    return np.append(np.append([0,0], cttrs),[0,0])

然后您可以直接在您的系列中调用:

calc_new_cttr(data_df["CTTR"])

要写入csv,可以将转换的列指定给数据帧,并使用csv编写器导出到csv:

data_df["transformed_cttr"] = calc_new_cttr(data_df["CTTR"])
data_df.to_csv("/path/to/your/file.csv")

编辑-

最新注释中描述的边界行为可以通过在应用转换之前填充序列,然后返回结果数组而不包含前两个和后两个条目来实现:

def cttr(series):
    vals = np.append(np.append([0,0], series.values),[0,0])
    cttrs = np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.
    return cttrs

相关问题 更多 >