我有一个如下所示的数据帧:
Person Day Value
1 Mon 32
1 Tue 30
1 Wed 34
1 Thu 22
1 Fri 43
2 Mon 22
2 Wed 14
2 Fri 11
3 Tue 13
3 Wed 22
3 Thu 23
数据集查看一组人的每个工作日(周一至周五)的值。有些人有完整的5天(例如,人1),有些人只有几天。我想创建新的空行,这样每个人都有完整的5天,即使他们没有值
这是我想要的输出:
Person Day Value
1 Mon 32
1 Tue 30
1 Wed 34
1 Thu 22
1 Fri 43
2 Mon 22
2 Tue Nan
2 Wed 14
2 Thu Nan
2 Fri 11
3 Mon Nan
3 Tue 13
3 Wed 22
3 Thu 23
3 Fri Nan
我试着写了一些东西,但我不知道如何让它正确地遍历每个人:
days = ['mon','tue','wed','thu','fri']
def normalise(person):
newperson = pd.DataFrame()
for day in days:
if day in person:
newperson[day] = days
else:
newperson[day] = np.nan
return newperson
normalised = normalise(df)
这只生成天数,但不包含其他值。 实际数据集大约有200000人。 任何想法都很好,谢谢
unstack
和stack
返回dropna=False
:@anky的解决方案很棒;我将推荐一种替代方法,它可以方便地抽象解决方案(特别是对于非唯一索引和空值)
可以使用pyjanitor中的complete函数公开显式缺少的值:
如果要保持日的顺序,可以将“日”列转换为分类类型:
相关问题 更多 >
编程相关推荐