python - 使用其他列中的连续差异创建数据框列
问题描述
我有一个这样的数据框列:
Index LtoR MSR LtoR CSR x
0 0.0 0 0 0
1 1.0 0.5 0 0.5
2 2.0 1 15 1.15
3 3.0 1 31 1.31
4 4.0 1.5 0 1.5
5 5.0 1.5 16 1.66
6 6.0 2 24 2.24
我想创建一个新列,以便考虑 2 xl 值之间的差异。所以我想做类似的事情
Index LtoR MSR LtoR CSR x Width L
0 0.0 0 0 0 (x2 - x0)/2 = 1.15/2 = 0.575
1 1.0 0.5 0 0.5 (x3 - x1)/2 = 0.81/2 = 0.405
2 2.0 1 15 1.15
3 3.0 1 31 1.31
4 4.0 1.5 0 1.5
5 5.0 1.5 16 1.66
6 6.0 2 24 2.24
我尝试了以下代码:
for i in range(0,10):
df['New Col'] = ((np.float64(df['x'][i+2]) - np.float64(2['x'][i]))/2)
但这会返回有关复制值与查看值的错误。那我该怎么办?
解决方案
您可以使用.shift()
获取 (row+2)-th 条目并设置公式如下:
df['Width L'] = (df['x'].shift(-2) - df['x']) / 2
结果:
print(df)
Index LtoR MSR LtoR CSR x Width L
0 0.0 0.0 0 0.00 0.575
1 1.0 0.5 0 0.50 0.405
2 2.0 1.0 15 1.15 0.175
3 3.0 1.0 31 1.31 0.175
4 4.0 1.5 0 1.50 0.370
5 5.0 1.5 16 1.66 NaN
6 6.0 2.0 24 2.24 NaN
如果您希望最后 2 个条目不存在NaN
并取 的原始值x
,则可以另外使用.fillna()
,如下所示:
df['Width L'] = ((df['x'].shift(-2) - df['x']) / 2).fillna(df['x'])
结果:
print(df)
Index LtoR MSR LtoR CSR x Width L
0 0.0 0.0 0 0.00 0.575
1 1.0 0.5 0 0.50 0.405
2 2.0 1.0 15 1.15 0.175
3 3.0 1.0 31 1.31 0.175
4 4.0 1.5 0 1.50 0.370
5 5.0 1.5 16 1.66 1.660
6 6.0 2.0 24 2.24 2.240
或者,如果您想将不可用的第 (row+2) 个条目视为0
,可以使用fill_value
参数 .shift()
设置 的默认值0
,如下所示:
df['Width L'] = (df['x'].shift(-2, fill_value=0) - df['x']) / 2
结果:
print(df)
Index LtoR MSR LtoR CSR x Width L
0 0.0 0.0 0 0.00 0.575
1 1.0 0.5 0 0.50 0.405
2 2.0 1.0 15 1.15 0.175
3 3.0 1.0 31 1.31 0.175
4 4.0 1.5 0 1.50 0.370
5 5.0 1.5 16 1.66 -0.830
6 6.0 2.0 24 2.24 -1.120
推荐阅读
- php - Laravel 将文件缓存迁移到 redis
- javascript - 如何设置超时以在 Javascript 中使用 if 函数显示多个 div
- sql - Powershell SQL Server Read-SqlTableData 将数字转换为十进制
- api - POT失眠插件安装失败
- javascript - 是否有一种方法可以将 '1234567' 转换为 ['1234', '567', '', '']?
- c++ - 如何在不使用 C/C++ 声明附加函数的情况下去除重复代码?
- sql - SQL 命令未正确结束 PL/SQL
- checkbox - 将复选框与中心的标签对齐
- python - 错误“图像”没有属性“打开”,但它应该
- javascript - 用函数javascript用另一个字符替换空格