首页 > 解决方案 > Python pandas:如何在数据框列中的现有值之间填充值?

问题描述

我有一个带有 3 列的 pandas DataFrame。第一列包含以特定频率升序排列的字符串值(e.g. '20173070000', '20173070020', '20173070040', etc.)。第二列和第三列包含对应的整数值。我想将第一列重新采样到每个列 - '20173070000'、'20173070001'、'20173070002',同时用NaN值填充第二列和第三列,然后我想插入这些NaN值。

我已经研究过重新采样数据,但这似乎只适用于timedate值。我还研究了 pd.interpolate,但这似乎适用于在缺失值之间进行插值。如上所述,我的数据集不包含缺失数据。我只是想增加我的条目的频率 - 在现有值之间填充。

为了提供一些参考,我当前的 DataFrame 如下所示:

         0             1             2
0      20173070000    14.0          13.9
1      20173070020    14.1          14.1
2      20173070040    13.8          13.6
3      20173070060    13.7          13.7
4      20173070080    13.8          13.5
5      20173070100    13.9          14.0

我想生成一个如下所示的 DataFrame:

         0             1             2
0      20173070000    14.0          13.9
1      20173070001    NaN            NaN
2      20173070002    NaN            NaN
3      20173070003    NaN            NaN
4      20173070004    NaN            NaN
5      20173070005    NaN            NaN
...
20     20173070020    14.1           14.1
21     20173070021    NaN            NaN
...

之后我对插值进行排序没有问题,但我还没有弄清楚如何上采样。

标签: pythonpandasdataframe

解决方案


您可以只使用重新索引功能。默认情况下,它将 NaN 放置在“新”索引中没有值的位置。

df = pd.DataFrame({'A': [20173070000, 20173070020, 20173070040, 20173070060, 20173070080, 20173070100 ], 
                  'B': [14, 14.1, 13.8, 13.7, 13.8, 13.9],
                  'C': [13.9, 14.1, 13.6, 13.7, 13.5, 14.0]  })

df.set_index('A').reindex(np.arange(np.min(df.A), np.max(df.A)+1)  ).reset_index()

推荐阅读