针对缺失的日期

时间:2018-05-09 08:50:03

标签: python

我做了很多搜索,但找不到解决这个简单问题的方法。

我有一个包含许多列的数据框,为简单起见,我只显示4列这样的列。

df = pd.DataFrame({
   'groups': ['A', 'A','A','A','A','A','A','A','A', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'],
   'date': [6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535, 6535],
   'days': [1, 2, 4, 7, 11, 12, 13, 14, 15, 1, 3, 4, 5, 6, 9, 10, 12, 13, 14],
   'price': [64, 82, 31, 77, 21, 39, 79, 67, 45, 66, 24, 60, 64, 56, 41, 29, 60, 57, 68]
})

我想为缺少的日子创建新行,以便我得到一个像这样的表

enter image description here

因此,我希望按groupsdate进行分组,然后浏览days列(范围为1到15)并添加一行,用于复制行的缺失日期基于分组的groupsdate,但price列的值为NaN(空单元格)。

我在R

中寻找类似的解决方案
library(dplyr)
library(tidyr)
df %>% group_by(date,groups) %>% complete(days = 1:15)

1 个答案:

答案 0 :(得分:0)

我试过这个来解决这个问题。与R中的简单解决方案相比,它有点混乱。希望其他人可以拥有更好更好的代码

def reindex(df):
    min_ = 1
    max_ = 16
    index = range(min_, max_)
    df.set_index('days', inplace = True)
    df_reindexed = df.reindex(index).reset_index()
    cols = list(set(df.columns) - set(['price']))
    df_reindexed[cols] = df_reindexed[cols].ffill().bfill()
    return df_reindexed

df2 = df1.groupby(['groups', 'date'], as_index=False).apply(reindex)
df2