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

使用常量值和前一个值使用 pandas 更新每个行值

席俊达
2023-03-14

我有一个有4列的数据帧,第一列等于计数器,计数器的值为十六进制。

counter       frequency     resistance      phase
0          15000.000000   698.617126    -0.745298
1          16000.000000   647.001708    -0.269421
2          17000.000000   649.572265    -0.097540
3          18000.000000   665.282775     0.008724
4          19000.000000   690.836975    -0.011101
5          20000.000000   698.051025    -0.093241
6          21000.000000   737.854003    -0.182556
7          22000.000000   648.586792    -0.125149
8          23000.000000   643.014160    -0.172503
9          24000.000000   634.954223    -0.126519
a          25000.000000   631.901733    -0.122870
b          26000.000000   629.401123    -0.123728
c          27000.000000   629.442016    -0.156490
| counter | sampling frequency | time.   |
| --------| ------------------ |---------|
| 0       |  -                 |t0=0     |
| 1       |  1                 |t1=t0+sf |
| 2       |  1                 |t2=t1+sf |
| 3       |  1                 |t3=t2+sf |

时间列是添加到原始数据帧中的新列。我想在x轴上绘制时间,在y轴上绘制频率、电阻和相位。

共有1个答案

狄兴业
2023-03-14

因为为了计算任何行的值,您需要计算前一行的值。对于这个问题,您可能必须使用for循环

对于一个恒定的频率,你可以预先计算,不需要在数据框中操作:

sampling_freq = 1

df['time'] = [sampling_freq * i for i in range(len(df))]

如果你需要在dataframe中操作(假设频率可能在某个点改变),为了根据行号和列名调用每个单元格,你可以这样建议。对行和列都使用数字,语法会容易得多,但我更喜欢用< code >“time”而不是< code>2。

df['time'] = np.zeros(len(df))

for i in range(1, len(df)):
    df.iloc[i, df.columns.get_loc('time')] = df.iloc[i-1, df.columns.get_loc('time')] + df.iloc[i, df.columns.get_loc('sampling frequency')]

或者,重置索引,以便可以遍历连续的数字:

df['time'] = np.zeros(len(df))
df = df.reset_index()

for i in range(1, len(df)):
    df.loc[i, 'time'] = df.loc[i-1, 'time'] + df.loc[i, 'sampling frequency']

df = df.set_index('counter')

请注意,由于您的采样频率在整个实验中可能是恒定的,因此您可以将其简化为:

sampling_freq = 1

df['time'] = np.zeros(len(df))

for i in range(1,len(df)):
    df.iloc[i, df.columns.get_loc('time')] = df.iloc[i-1, df.columns.get_loc('time')] + sampling_freq

但这并不会比第一个例子中创建时间序列更好。

 类似资料:
  • 问题内容: 我想更新表中列的前10个值。我有三栏;,和。要获得前10个值,我可以使用以下方法: 我想做的是根据的大小将值设置为一系列。这可以在PostgreSQL中完成吗? 问题答案: WITH cte AS ( SELECT id, row_number() OVER (ORDER BY account DESC NULLS LAST) AS rn FROM accountrecords ORD

  • 问题内容: 这与其他问题类似,但是在每个数据库的实现中似乎有所不同。我正在使用postgres,似乎不存在类似的东西。 这是我要工作的: 我知道 为什么 不行,但是我似乎找不到适合Postgres的合适解决方案。我希望的值是1到10之间的随机数, 每 行不同。 问题答案: 我认为Postgres可能会优化子查询。这不行吗?

  • 我试图用Python复制我的Stata代码,我被指向熊猫的方向。然而,我很难思考如何处理数据。 假设我想遍历列标题“ID”中的所有值。如果该ID与一个特定的数字匹配,那么我想更改两个相应的值FirstName和LastName。 在Stata,它看起来像这样: 因此,这将替换 FirstName 中与 ID == 103 到 Matt 的值对应的所有值。 在熊猫身上,我正在尝试这样的东西 不知道该

  • 问题内容: 我想更新一个字典中的值,该值只能由字典中的另一个值来标识。也就是说,鉴于此输入: 我想将伴随格式更改为“ csv”: 我发现这可行: 但这似乎很冗长,所以我想知道是否有一种更优雅的方式来表达这一点。jq似乎缺少某种表达式选择器,等效于xpath。 (当我开始这个问题时,我发现了,所以并没有我想的那么糟。) 问题答案: 您要寻找的是一项复杂的任务: 也许不短,但是根据要求它更优雅。请参阅

  • 假设我有一个名为mytable的表,它看起来像这样: 我希望能够更新所有的记录在p6列添加到39但只为行有不同的p2值。换句话说,结果表应该如下所示: 我将p6行着色为黄色,以显示它不应该移动的地方,因为所有的p2单元格都是灰色的,它们的值是相同的。绿色的p6行应该会增长,因为p2也会增长,所以我把+39加到所有的行上。示例中的最后第13行再次为黄色,因为12行上的p2=13行上的p2。 在Gor

  • 本文向大家介绍使用MySQL WHERE子句中的多个值进行更新,包括了使用MySQL WHERE子句中的多个值进行更新的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是使用WHERE子句中的多个值更新的查询- 让我们再次检查表记录- 这将产生以下输出-