Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于具有空行的列向dataframe添加新列_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

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