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

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

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

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

pandas

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

Q&A

解決済

1回答

2664閲覧

Python Pandas 行列の入れ替え

pon244

総合スコア59

Python

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

pandas

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

0グッド

0クリップ

投稿2020/02/19 09:29

【欲しい結果】
・IDの1日ごとの数字をDataFrameへ
・上記の数字を横軸が時間、縦軸がSpend、折れ線グラフがIDのグラフ作成

【エラー部分】
Tronspose,Tなどを使用したが、うまくIDのユニークが出せない
実際のコード

import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt #エクセルを読む df= pd.read_excel('test.xlsx',) #A列がTIMEで複数あるからGroupByで合計 grp = df.groupby('Time').sum() #CPxを出すために新しい行を追加作成 grp['CPx'] = grp['Spend'] / grp['Installs'] #時間を列に行にIDsを加える。列の値はSpend、Install、Cpx #それをグラフにする grp.head(10)

【grp.headの結果】
Idsの部分は同じIdsでも日付毎に全部IDがエクセルに入ってるので、下記の用にIDが足し算されてる
|列1|列2|列3|列4|列4
|:--|:--:|--:
|Time|Spend|Install|CPx|IDs
|11-Feb-2020 00:00|200|10|20|8332,32e
12-Feb-2020 00:00|100|10|10|8332,32e
13-Feb-2020 00:00|100|10|10|8332,32e

【欲しい結果】
|列1|11-Feb-2020 00:00|12-Feb-2020|13-Feb-2020 00:00
|:--|:--:|--:
|IDs|Spend|Install|Cpx|
|123445(uniqueのID)|200|10|20|8332,32e
123446(uniqueのID)|100|10|10|8332,32e
123447(uniqueのID)|100|10|10|8332,32e

【エクセルの形】
|列1|列2|列3|列4|列4
|:--|:--:|--:
|Time|Spend|Install|CPx|IDs
|11-Feb-2020 00:00|200|10|20|123445
12-Feb-2020 00:00|100|10|10|123445
13-Feb-2020 00:00|100|10|10|123446
|11-Feb-2020 00:00|200|10|20|123446
12-Feb-2020 00:00|100|10|10|123447
13-Feb-2020 00:00|100|10|10|123447

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1df = df.set_index(['IDs', 'Time']) 2df = df.unstack() 3df = df.swaplevel(axis=1).sort_index(axis=1) 4#Time 11-Feb-2020 00:00 12-Feb-2020 00:00 \ 5# CPx Install Spend CPx Install Spend 6#IDs 7#123445 20.0 10.0 200.0 10.0 10.0 100.0 8#123446 20.0 10.0 200.0 NaN NaN NaN 9#123447 NaN NaN NaN 10.0 10.0 100.0 10# 11#Time 13-Feb-2020 00:00 12# CPx Install Spend 13#IDs 14#123445 NaN NaN NaN 15#123446 10.0 10.0 100.0 16#123447 10.0 10.0 100.0

投稿2020/02/19 12:00

編集2020/02/19 12:01
meg_

総合スコア10577

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

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

pon244

2020/02/19 13:01

import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt #エクセルを読む df= pd.read_excel('test.xlsx',) #A列がTIMEで複数あるからGroupByで合計 grp = df.groupby('Time').sum() #CPxを出すために新しい行を追加作成 grp['CPx'] = grp['Spend'] / grp['Installs'] #時間を列に行にIDsを加える。列の値はSpend、Install、Cpx #それをグラフにする df = df.set_index(['IDs', 'Time']) df = df.unstack() df = df.swaplevel(axis=1).sort_index(axis=1) 結果はIndex contains duplicate entries, cannot reshape が出てしまいます泣
meg_

2020/02/21 10:17

私のコードでご質問の【欲しい結果】は出ていると思いますが違うのでしょうか? エクセルから読み込んだDataFrame(df)に対して私の回答のコードを適用してください。
pon244

2020/02/22 03:31

df=df.set_index([‘IDs', 'Time '],append=True) append=Trueで解決しました! 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問