[英]Insert row in pandas Dataframe based on Date Column
I have a Dataframe df and a list li, My dataframe column contains: 我有一个Dataframe df和一个列表li,我的dataframe列包含:
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
My list contain Name of all Student li=[A,B,C] If any student have not came on particular day then insert the name of student in dataframe with score value = 0 我的列表包含所有学生的姓名li = [A,B,C]如果某个学生在特定日期还没有来,则将学生的姓名插入分数值为= 0的数据框中
My Final Dataframe should be like: 我的最终数据框应为:
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
Use DataFrame.reindex
with MultiIndex.from_product
: 将DataFrame.reindex
与MultiIndex.from_product
DataFrame.reindex
使用:
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
Alternative is use left join with DataFrame.merge
and helper DataFrame created by product
, last replace missing values by fillna
: 另一种方法是使用剩下加入DataFrame.merge
和创建帮手据帧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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.