为了账号安全,请及时绑定邮箱和手机立即绑定

根据日期列在熊猫数据框中插入行

根据日期列在熊猫数据框中插入行

犯罪嫌疑人X 2022-01-05 20:02:46
我有一个数据框 df 和一个列表 li,我的数据框列包含:    Student     Score   Date      A             10      15-03-19    C             11      16-03-19    A             12      16-03-19    B             10      16-03-19    A             9       17-03-19我的列表包含所有学生的姓名 li=[A,B,C] 如果任何学生在特定日期没有来,则在数据框中插入学生的姓名,分数值为 0我的最终数据框应该是这样的:    Student   Score   Date    A         10      15-03-19    B         0       15-03-19    C         0       15-03-19    C         11      16-03-19    A         12      16-03-19     B         10      16-03-19    A         9       17-03-19    B         0       17-03-19    C         0       17-03-19
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

使用DataFrame.reindex有MultiIndex.from_product:


li = list('ABC')


mux = pd.MultiIndex.from_product([df['Date'].unique(), li], names=['Date', 'Student'])

df = df.set_index(['Date', 'Student']).reindex(mux, fill_value=0).reset_index()

print (df)

       Date Student  Score

0  15-03-19       A     10

1  15-03-19       B      0

2  15-03-19       C      0

3  16-03-19       A     12

4  16-03-19       B     10

5  16-03-19       C     11

6  17-03-19       A      9

7  17-03-19       B      0

8  17-03-19       C      0

替代方法是使用左连接DataFrame.merge和辅助 DataFrame 创建product,最后替换缺失值fillna:


from  itertools import product

df1 = pd.DataFrame(list(product(df['Date'].unique(), li)), columns=['Date', 'Student'])

df = df1.merge(df, how='left').fillna(0)

print (df)

       Date Student  Score

0  15-03-19       A   10.0

1  15-03-19       B    0.0

2  15-03-19       C    0.0

3  16-03-19       A   12.0

4  16-03-19       B   10.0

5  16-03-19       C   11.0

6  17-03-19       A    9.0

7  17-03-19       B    0.0

8  17-03-19       C    0.0


查看完整回答
反对 回复 2022-01-05
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信