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

时间:2019-04-10 11:17:31

标签: python pandas

我有一个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

我的列表包含所有学生的姓名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 个答案:

答案 0 :(得分:2)

DataFrame.reindexMultiIndex.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.mergeproduct创建的帮助器DataFrame左连接,最后用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