複数の空白行がある次のようなデータフレームがあります。
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
date
空白行の直後の列からの最初の日付で新しい列が作成された場合。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加