質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

316閲覧

Start_timeとEnd_timeの抜きだす方法(画像(1)のデータフレームを基に、画像(2)のcsvを作る方法)

shin_shin

総合スコア96

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2018/10/31 06:33

編集2019/02/08 03:04

最初に質問を完結に表現します。
[質問]
以下の(1)のデータフレームを基に、(2)のcsvを完成させたいです。
そのpythonコードをfor文を使わずに表現したいです。

(1)
イメージ説明

(2)
イメージ説明

[補足説明]

  1. (2)の"Start_Time"と"End_Time"というのは、(1)の"Status_GTCC_Efficiency"の各valueがどのくらい連続しているかを示すものです。

  2. つまり、以下を例にすると、"2016/1/1 0:00"から"2016/1/1 0:04"まで、Status "M"が連続していた。ということになります。

Start_Time   End_Time   Duration   Status
2016/1/1 0:00 2016/1/1 0:04 5       M

それをpythonでどのようにコーディングできるか、ご教示願います。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/10/31 06:35

なにをしたいんでしょうか。詳しく説明してください
shin_shin

2018/10/31 06:44

画像(1)のデータフレームから、pythonでどのように書けば、画像(2)のcsvを作ることができるのか?という質問です。
y_waiwai

2018/10/31 06:47

タイトルのdfというのは関係ないのでしょうか?
shin_shin

2018/10/31 06:50

関係ある、という認識です。dataframeを作って、to_csv()するという流れを自分の中で想定してました。確かに、タイトル誤解を与えてしまうと思うので、書き換えます。
y_waiwai

2018/10/31 06:51

ああ、dfってデータフレームの略でしたかw
guest

回答1

0

ベストアンサー

こんな感じで出来るかと思います

Python

1import pandas as pd 2 3# データ作成 4N = 20 5df = pd.DataFrame( 6 { 7 'Time': pd.date_range('2016/01/01 00:00', periods=N, freq='1Min'), 8 'Status_GTCC_Efficiency' : ['M','M','M','M','M','H','H','H','H','H','M','M','M','M','M','H','H','H','H','H'] 9 } 10) 11df = df.set_index('Time') 12 13# データGroupIDをふる 14df['GroupID']= (df['Status_GTCC_Efficiency'].shift() != df['Status_GTCC_Efficiency']).cumsum() 15 16# 出力データ生成用関数 17def func(d): 18 return pd.Series({ 19 'Start_Time':d.index[0], 20 'End_Time':d.index[-1], 21 'Duration': len(d), 22 'Status': d['Status_GTCC_Efficiency'][0] 23 }) 24 25 26# GroupID によりグループ毎に上記の関数を適用する 27res = df.groupby('GroupID').apply(func).reset_index(drop=True) 28# 一応列順を整理 29res = res.loc[:,['Start_Time', 'End_Time', 'Duration', 'Status']] 30print(res) 31# Start_Time End_Time Duration Status 32#0 2016-01-01 00:00:00 2016-01-01 00:04:00 5 M 33#1 2016-01-01 00:05:00 2016-01-01 00:09:00 5 H 34#2 2016-01-01 00:10:00 2016-01-01 00:14:00 5 M 35#3 2016-01-01 00:15:00 2016-01-01 00:19:00 5 H

投稿2018/10/31 08:05

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問