根据日期列在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.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
创建的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 中每个项目的开始和结束日期计算每月活动的项目数
根据日期创建每月重新采样的 Pandas DataFrame
pandas使用query函数查询dataframe中某一个数据列在指定数据范围的数据行(rows where value is between two values in dataframe)