Python 基于具有空行的列向dataframe添加新列
我有一个数据框,它有多个空行,如下所示:Python 基于具有空行的列向dataframe添加新列,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据框,它有多个空行,如下所示: date hour Temp 6/1/2017 0:00 64 6/7/2017 22:00 63 6/7/2017 23:00 62 6/2/2017 0:00 62 6/2/2017 1:00 60 6/8/2017 23:00 65 6/6/2017 0:00 64 6/6/2017 1:00 64 6/12/2017 22:00
date hour Temp
6/1/2017 0:00 64
6/7/2017 22:00 63
6/7/2017 23:00 62
6/2/2017 0:00 62
6/2/2017 1:00 60
6/8/2017 23:00 65
6/6/2017 0:00 64
6/6/2017 1:00 64
6/12/2017 22:00 78
6/12/2017 23:00 76
我要创建以下内容:
date hour Temp newDate
6/1/2017 0:00 64 6/1/2017
6/7/2017 22:00 63 6/1/2017
6/7/2017 23:00 62 6/1/2017
6/2/2017 0:00 62 6/2/2017
6/2/2017 1:00 60 6/2/2017
6/8/2017 23:00 65 6/2/2017
6/6/2017 0:00 64 6/6/2017
6/6/2017 1:00 64 6/6/2017
6/12/2017 22:00 78 6/6/2017
6/12/2017 23:00 76 6/6/2017
在空白行之后,从“代码>日期>代码>列中创建第一列的新列。
我正在尝试创建for循环,但有更好的方法吗?毫无疑问,这将是一个智能的解决方案。但是这里有一个使用
itertools.groupby
的解决方案。我假设您的空行由NaN
项组成,并利用np.NaN==np.NaN
返回False
这一事实
from itertools import groupby, chain
# group by items being NaN
grouper = groupby(df['date'], key=lambda x: x==x)
# extract first item, multiply and chain
chainer = chain.from_iterable([next(j)]*(len(list(j))+1) for _, j in grouper)
# assign to new series
df['newDate'] = list(chainer)
print(df)
date hour Temp newDate
0 NaN NaN NaN NaN
1 6/1/2017 0:00 64.0 6/1/2017
2 6/7/2017 22:00 63.0 6/1/2017
3 6/7/2017 23:00 62.0 6/1/2017
4 NaN NaN NaN NaN
5 6/2/2017 0:00 62.0 6/2/2017
6 6/2/2017 1:00 60.0 6/2/2017
7 6/8/2017 23:00 65.0 6/2/2017
8 NaN NaN NaN NaN
9 6/6/2017 0:00 64.0 6/6/2017
10 6/6/2017 1:00 64.0 6/6/2017
11 6/12/2017 22:00 78.0 6/6/2017
12 6/12/2017 23:00 76.0 6/6/2017