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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

pandas

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

Q&A

解決済

1回答

794閲覧

データフレーム列内の要素の数を数える方法。

退会済みユーザー

退会済みユーザー

総合スコア0

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/02/25 05:40

日本のイベントをまとめたデータフレーム【df_event】があります。
df_event["協賛会社"]、df_event["運営会社"]、df_event["管理会社"]のデータをmatplotlibで可視化したいと思っています。
それぞれのイベントの["協賛会社"]、["運営会社"]、["管理会社"]の数を調べて3つ並べた箱ひげ図を作成したいと考えています。

下記コードで作成してみたのですが、同一ページ内で列名を変えて書いていくと行がどんどん増えてしまい、正しい処理ができなくなってしまいます。(単純に数を数えるだけなら現行のコードでいいのですが、、)【現在の処理状況】

各列の要素を会社名から会社数を数えた数字に置き換えたSiries(例えばdf_event["協賛会社数"]など)を作るにはどのような方法がありますでしょうか?
何かアドバイスをいただけたらと思います。。

【現状】

python

1from io import StringIO 2import pandas as pd 3import japanize_matplotlib 4 5 6data = StringIO(""" 7イベント名,都道府県名,費用(万円),協賛会社,運営会社,管理会社 8〇〇祭り,北海道,780,A社,B社、E社,H社、P社 9□□大会,北海道,467,B社、F社、H社、K社、L社,J社、K社、D社,A社 10△△パーティー,東京都,428,C社、D社,N社,B社、O社 11●●祭,神奈川県,591,E社、F社、A社、C社,O社、F社,C社 12✖︎✖︎生誕祭,大阪府,227,G社、B社,F社、H社、D社,L社 13■■ディナーショー,大阪府,74,C社、N社、Q社,H社、A社,D社、J社、M社 14▲▲イベント,沖縄,356,D社、E社、F社,B社、K社,E社、F社|列1|列2|列3| 15""") 16df_event = pd.read_csv(data) 17 18tmpa = df_event['協賛会社'].str.split('、', expand=True).unstack().rename('協賛会社') 19tmpa = tmpa.reset_index(level=0).dropna() 20df_event = df_event.drop(columns=['協賛会社']).merge(tmpa, left_index=True, right_index=True, how='right') 21company = df_event.groupby('イベント名').count()["協賛会社"]

【現在の処理状況】
イメージ説明

【理想の形】
|イベント名|都道府県名|費用(万円)|協賛会社|運営会社|管理会社|協賛会社数|運営会社数|管理会社数|
|:--|:--:|--:|
||||
〇〇祭り|北海道|780|A社|B社、E社|H社、P社|1|2|2
□□大会|北海道|467|B社、F社、H社、K社、L社|J社、K社、D社|A社|5|3|1
△△パーティー|東京都|428|C社、D社|N社|B社、O社|2|1|2
●●祭|神奈川県|591|E社、F社、A社、C社|O社、F社|C社|4|2|1
✖︎✖︎生誕祭|大阪府|227|G社、B社|F社、H社、D社|L社|2|3|1
■■ディナーショー|大阪府|74|C社、N社、Q社|H社、A社|D社、J社、M社|3|2|3
▲▲イベント|沖縄|356|D社、E社、F社|B社、K社|E社、F社|3|2|2

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

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

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

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

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

guest

回答1

0

ベストアンサー

各列の要素を会社名から会社数を数えた数字に置き換えたSiries(例えばdf_event["協賛会社数"]など)を作るには

単に「、」区切りの要素の数を得たいということでしょうか?
であれば以下のような感じでできます。

Python

1from io import StringIO 2import pandas as pd 3pd.set_option('display.unicode.east_asian_width', True) 4 5data = StringIO(""" 6イベント名,都道府県名,費用(万円),協賛会社,運営会社,管理会社 7〇〇祭り,北海道,780,A社,B社、E社,H社、P社 8□□大会,北海道,467,B社、F社、H社、K社、L社,J社、K社、D社,A社 9△△パーティー,東京都,428,C社、D社,N社,B社、O社 10●●祭,神奈川県,591,E社、F社、A社、C社,O社、F社,C社 11✖︎✖︎生誕祭,大阪府,227,G社、B社,F社、H社、D社,L社 12■■ディナーショー,大阪府,74,C社、N社、Q社,H社、A社,D社、J社、M社 13▲▲イベント,沖縄,356,D社、E社、F社,B社、K社,E社、F社 14存在しないイベント,沖縄,356,,, 15""") 16df_event = pd.read_csv(data) 17 18def split(row): 19 cnt = 0 if pd.isnull(row['協賛会社']) else len(row['協賛会社'].split('、')) 20 row['協賛会社数'] = cnt 21 # 他も同様に 22 return row 23 24df_event = df_event.apply( split, axis=1) 25 26print(df_event.loc[:,['イベント名', '協賛会社数', '協賛会社']]) 27""" 28 イベント名 協賛会社数 協賛会社 290 〇〇祭り 1 A社 301 □□大会 5 B社、F社、H社、K社、L社 312 △△パーティー 2 C社、D社 323 ●●祭 4 E社、F社、A社、C社 334 ✖︎✖︎生誕祭 2 G社、B社 345 ■■ディナーショー 3 C社、N社、Q社 356 ▲▲イベント 3 D社、E社、F社 367 存在しないイベント 0 NaN 37"""

投稿2020/02/25 06:47

編集2020/02/25 10:52
can110

総合スコア38233

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

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

退会済みユーザー

退会済みユーザー

2020/02/25 08:52

ご回答ありがとうございます! df_event = df_event.apply( split, axis=1) でAttributeErrorに引っかかってしまいます。。 AttributeError: ("'float' object has no attribute 'split'", 'occurred at index 245')
can110

2020/02/25 09:03

回答コードをそのままコピペして実行してますでしょうか? こちらの環境ではエラーは発生しません。
退会済みユーザー

退会済みユーザー

2020/02/25 10:37

実際のデータだと、NaNがあるところで引っかかっているのかもしれません。。
can110

2020/02/25 10:52

NaNを考慮して回答コードを修正しました。
退会済みユーザー

退会済みユーザー

2020/02/25 11:22

助かりました!! ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問