在Python中比较两个列名并插入平均值

在Python中比较两个列名并插入平均值,python,mean,Python,Mean,我的CSV文件如下所示。第一行是波长的列名 3000 3005 3010 3020 3025 3035 0.12 0.11 0.19 0.16 0.18 0.20 0.25 0.34 0.15 0.20 0.25 0.45 0.05 0.08 0.25 0.35 0.66 0.22 像这样,我总共有大约135列,其中28列缺失。列以5为增量。因此,我想比较列名并插入上一列和下一列数据的平均值。例如,缺少列3015,

我的CSV文件如下所示。第一行是波长的列名

3000   3005   3010   3020   3025   3035
0.12   0.11   0.19   0.16   0.18   0.20
0.25   0.34   0.15   0.20   0.25   0.45
0.05   0.08   0.25   0.35   0.66   0.22
像这样,我总共有大约135列,其中28列缺失。列以5为增量。因此,我想比较列名并插入上一列和下一列数据的平均值。例如,缺少列
3015
,因此我想将其与列列表进行比较,并将平均值(例如
(0.19+0.16)/2
)插入新列(
3015

现在我只是手动操作,就像:

data["3015"] = None
data["3015"] = (data["3010"] + data["3020"]) / 2.

有没有更有效的方法来实现这一点?

根据列是str还是int,第一行可能需要更改,但基本上您可以使用df来生成缺少的波长,然后调用并传递
axis=1
来填充缺少的值,这相当于在以下时间前后取测量值的平均值:

In [149]:
new_df = df.reindex(columns=np.arange(3000, 3040, 5).astype(str))
new_df

Out[149]:
   3000  3005  3010  3015  3020  3025  3030  3035
0  0.12  0.11  0.19   NaN  0.16  0.18   NaN  0.20
1  0.25  0.34  0.15   NaN  0.20  0.25   NaN  0.45
2  0.05  0.08  0.25   NaN  0.35  0.66   NaN  0.22

In [158]:
new_df.interpolate(axis=1)

Out[158]:
   3000  3005  3010   3015  3020  3025  3030  3035
0  0.12  0.11  0.19  0.175  0.16  0.18  0.19  0.20
1  0.25  0.34  0.15  0.175  0.20  0.25  0.35  0.45
2  0.05  0.08  0.25  0.300  0.35  0.66  0.44  0.22
因此,如果您的列如下所示:

In [146]:    
df.columns.tolist()

Out[146]:
['3000', '3005', '3010', '3020', '3025', '3035']
然后,您需要对np.arange的结果进行强制转换,如我所示,如果存在int,则不需要强制转换,因此可以执行以下操作:

new_df = df.reindex(columns=np.arange(3000, 3040, 5))

请注意,您正在执行
data[str(x)]=(data[str(x-5)]+data[str(x+5)])/2.
,并从那里开始工作。此外,您不需要初始化为
None
。如果缺少连续两个,例如
3015
3020
,该怎么办?还是连续八次?您是如何加载csv的?你在用熊猫吗?@EdChum是的,我在用熊猫…好的,你的列是str还是int?如果执行
df.columns.tolist()