【问题标题】:Pandas Reindex - Fill Column with Missing ValuesPandas Reindex - 用缺失值填充列
【发布时间】:2015-02-10 00:23:37
【问题描述】:

我尝试了这个主题的几个示例,但没有结果。我正在阅读像这样的 DataFrame:

Code,Counts
10006,5
10011,2
10012,26
10013,20
10014,17
10015,2
10018,2
10019,3

如何获得另一个 DataFrame,例如:

Code,Counts
10006,5
10007,NaN
10008,NaN
...
10011,2
10012,26
10013,20
10014,17
10015,2
10016,NaN
10017,NaN
10018,2
10019,3

基本上是填充“代码”列的缺失值?我尝试了df.reindex() 方法,但我不知道它是如何工作的。非常感谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我会将索引设置为“代码”列,然后 reindex 根据您当前的索引传入一个新数组,arange 接受开始和停止参数(您需要在末尾添加 1 ) 然后reset_index 这假定您的“代码”值已经排序:

    In [21]:
    
    df.set_index('Code', inplace=True)
    df = df.reindex(index = np.arange(df.index[0], df.index[-1] + 1)).reset_index()
    df
    Out[21]:
         Code  Counts
    0   10006       5
    1   10007     NaN
    2   10008     NaN
    3   10009     NaN
    4   10010     NaN
    5   10011       2
    6   10012      26
    7   10013      20
    8   10014      17
    9   10015       2
    10  10016     NaN
    11  10017     NaN
    12  10018       2
    13  10019       3
    

    【讨论】:

    • 非常感谢!但是如果我必须在“代码”索引中添加回数据(例如从 0 到 10006)怎么办?
    • 你应该能够concat,在这种情况下,在调用reset_index之前,将索引设置为'代码'以获取其他数据,然后调用pd.concat([df, other_df]).reset_index()这应该将它们堆叠起来互相顶,希望这很清楚
    • 是的,对不起,这很有用,但我之前的评论不清楚。我不必“添加”数据,而只需使用我的实际 DataFrame 回到 0...我有一个包含未排序和非连续数据的数据库,我唯一知道的是较低的“代码”值 (0)和更高,但在分析过程中,较低的“代码”值不是恒定的(例如,现在数据集从 108 开始到 15000,我想填充限制内外的值)。
    • 我认为你仍然应该在你的第一个值之前重新索引,我刚刚尝试过它仍然可以正常工作
    • 你也可以通过合并来实现。 import pandas as pd Dict = {'Counts':[5,2,26,20,17,2,2,3], "code":[10006,10011,10012,10013,10014,10015,10018,10019] } df = pd.DataFrame(Dict).set_index('code') Filled = pd.DataFrame(range(min(df.index),max(df.index)+1)) df2 = pd.merge(Filled,df ,left_on=0,right_index=True,how='left')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多