首页 > 解决方案 > 如何在 df 列中填充无限制的数值

问题描述

所以我试图将行添加到应该遵循数字顺序 1 到 52 的数据框中

但我的数据缺少数字,所以我需要添加这些行并用 NaN 值或 null 填充这些点。

df = pd.DataFrame("Weeks": [1,2,3,15,16,20,21,52],
   "Values": [10,10,10,10,50,60,70,40])

期望的输出:

Weeks         Values
1              10
2              10
3              10
4              NaN
5              NaN
6              NaN
7              NaN
8              NaN
...
52             40

and so on until it reach Weeks = 52

我的解决方案:

new_df = pd.DataFrame("Weeks": "" , "Values":"")

for x in range(1,53):

    for i in df.Weeks:
        if x == i:
            new_df["Weeks"] = x
            new_df["Values"] = df.Values[i]

问题是它的效率非常低,有人知道一种以更有效的方式做到这一点的方法吗?

标签: pythonpandas

解决方案


您可以使用最多一周set_index来设置Weeksas 索引:reindexrange

df.set_index('Weeks').reindex(range(1,df.Weeks.max()))

或者也考虑最短周数:

df.set_index('Weeks').reindex(range(*df.Weeks.agg(('min', 'max'))))

        Values
Weeks        
1        10.0
2        10.0
3        10.0
4         NaN
5         NaN
6         NaN
7         NaN
8         NaN
9         NaN
10        NaN
11        NaN
12        NaN
13        NaN
14        NaN
15       10.0
16       50.0
17        NaN
...

推荐阅读