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

时间:2015-09-21 12:17:43

标签: 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,因此我想将其与列列表进行比较,并将均值(例如(0.19 + 0.16) / 2)插入新列(3015)。

现在我只是手动完成:

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

是否有可能以更有效的方式做到这一点?

1 个答案:

答案 0 :(得分:0)

根据您的列是str还是int,第一行可能需要更改,但基本上您可以{d}生成缺失的波长,然后调用reindex并传递{{1}填写缺失值,这相当于取得之前和之后的测量平均值:

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