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

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

ただいまの
回答率

88.82%

pandasのデータを結合する

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 205

hachiroku

score 20

date_index = pd.date_range('2020-03-15', freq='D', periods=28)
day_of_week = date_index.weekday_name
df1 = pd.DataFrame(day_of_week,
                     index=date_index,
                     columns=['day_of_week'])


df1

day_of_week
2020-03-15 Sunday
2020-03-16 Monday
2020-03-17 Tuesday
2020-03-18 Wednesday
2020-03-19 Thursday
2020-03-20 Friday
...

df2

tag 3/15日 3/16月 3/17火 3/18水 3/19木 3/20金 ...
0 a 33 32 45 45 43 34
1 b 22 12 21 21 24 22
2 c ...
3 d ...
4 e ...
5 f 12 13 12 12 14 15
...

df3

day_of_week tag reuslt
2020-03-15 Sunday a 33
2020-03-16 Monday a 32
2020-03-17 Tuesday a 45
2020-03-18 Wednesday a 45
2020-03-19 Thursday a 43
2020-03-20 Friday a 34
... ...
2020-03-15 Sunday f 12
2020-03-16 Monday f 13
2020-03-17 Tuesday f 12
2020-03-18 Wednesday f 12
2020-03-19 Thursday f 14
2020-03-20 Friday f 15

df3のようにするにはどのようにしたらよいでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

df1は不要、df2 を加工するだけで良いかと思います。

やっていることは

  • 'DataFrame.melt()` にてデータの形式をdf3の形式に加工
  • date列(文字列)をdatetime型に変換
  • date列をIndexに設定
  • day_of_week 行を生成

です。

import pandas as pd
import io

data = """
tag,3/15日,3/16月,3/17火,3/18水,3/19木,3/20金
a,33,32,45,45,43,34
b,22,12,21,21,24,22
f,12,13,12,12,14,15
"""

df2 = pd.read_csv(io.StringIO(data))
df3 = df2.melt(id_vars='tag', var_name='date', value_name='result')
df3['date'] = pd.to_datetime('2020/' + df3['date'].str.extract('(\d+\/\d+)', expand=False))
df3 = df3.set_index('date', drop=True)
df3['day_of_week'] = df3.index.weekday_name
print(df3)
#           tag  result day_of_week
#date
#2020-03-15   a      33      Sunday
#2020-03-15   b      22      Sunday
#2020-03-15   f      12      Sunday
#2020-03-16   a      32      Monday
#2020-03-16   b      12      Monday
#2020-03-16   f      13      Monday
#2020-03-17   a      45     Tuesday
#2020-03-17   b      21     Tuesday
#2020-03-17   f      12     Tuesday
#2020-03-18   a      45   Wednesday
#2020-03-18   b      21   Wednesday
#2020-03-18   f      12   Wednesday
#2020-03-19   a      43    Thursday
#2020-03-19   b      24    Thursday
#2020-03-19   f      14    Thursday
#2020-03-20   a      34      Friday
#2020-03-20   b      22      Friday
#2020-03-20   f      15      Friday

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/14 10:35

    pandas.melt()知らなかったのでとても参考になりました。reshapeしてfor文とpd.concat()でなんとかしようとしていたので助かりました。ここからデータをさらに加えてSARIMAモデルでデータ可視化できるか挑戦してみます。

    キャンセル

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

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る