我做了很多搜索,但找不到解决这个简单问题的方法。
我有一个包含许多列的数据框,为简单起见,我只显示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]
})
我想为缺少的日子创建新行,以便我得到一个像这样的表
因此,我希望按groups
和date
进行分组,然后浏览days
列(范围为1到15)并添加一行,用于复制行的缺失日期基于分组的groups
和date
,但price
列的值为NaN(空单元格)。
我在R
中寻找类似的解决方案library(dplyr)
library(tidyr)
df %>% group_by(date,groups) %>% complete(days = 1:15)
答案 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