根据日期列在pandas Dataframe中插入行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据日期列在pandas Dataframe中插入行相关的知识,希望对你有一定的参考价值。

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

使用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.merge创建的product和helper 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

以上是关于根据日期列在pandas Dataframe中插入行的主要内容,如果未能解决你的问题,请参考以下文章

附加列在 pandas DataFrame 中产生 NaN

根据 Pandas DataFrame 中每个项目的开始和结束日期计算每月活动的项目数

根据日期创建每月重新采样的 Pandas DataFrame

pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)

pandas DataFrame中按日期(在索引中)的加权平均分组(每列不同的操作)

如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?