🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

845閲覧

データフレームから割合をどう計算するのですか

samankoar

総合スコア7

Python

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2020/12/12 23:40

以下のデータフレームがあります

import pandas as pd df = pd.DataFrame({'Volcano Name': ['a', 'b', 'a', 'c', 'b', 'b', 'e', 'd', 'b', 'e', 'e'], 'Start Year': [1960, 1962, 1961, 1961, 1961, 1960, 1959, 1959, 1958, 1960, 1958], 'VEI': [0.0, 3.0,3.0,2.0, 3.0, 1.0, 1.0, 0.0, 2.0, 1.0, 2.0], 'Lat': [31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31]})

このから各火山(Volcano Name)のVEI 別のパーセンテージと全体的に(df)各VEIのパーセンテージを求めたいのですが、やり方をわかりません。教えてください。できるだけ簡単なコードでお願いします。

例えば:
a火山には VEI=0.0 が ○%、VEI=1.0 が ○%、VEI=2.0 が ○%、VEI=3.0 が ○%

自分がここから進んでいません

df.groupby('VEI').count()
df.pivot_table( index=['Volcano Name','VEI'], columns='Volcano Name')

よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1import pandas as pd 2 3df = pd.DataFrame({'Volcano Name': ['a', 'b', 'a', 'c', 'b', 'b', 'e', 'd', 'b', 'e', 'e'], 4 'Start Year': [1960, 1962, 1961, 1961, 1961, 1960, 1959, 1959, 1958, 1960, 1958], 5 'VEI': [0.0, 3.0,3.0,2.0, 3.0, 1.0, 1.0, 0.0, 2.0, 1.0, 2.0], 6 'Lat': [31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31]}) 7 8volcano = pd.DataFrame(df['Volcano Name'].value_counts()) 9volcano = volcano.reset_index() 10volcano.columns = ['Volcano Name', 'Volcano Name_count'] 11vei = pd.DataFrame(df.groupby('Volcano Name')['VEI'].value_counts()) 12vei.columns = ['VEI_count'] 13vei = vei.reset_index() 14 15result = vei.merge(volcano) 16result['VEI proprtion by Volcano'] = result['VEI_count'] / result['Volcano Name_count'] 17result['VEI proprtion'] = result['VEI_count'] / len(result) 18print(result) 19# Volcano Name VEI VEI_count Volcano Name_count VEI proprtion by Volcano VEI proprtion 20#0 a 0.0 1 2 0.500000 0.111111 21#1 a 3.0 1 2 0.500000 0.111111 22#2 b 3.0 2 4 0.500000 0.222222 23#3 b 1.0 1 4 0.250000 0.111111 24#4 b 2.0 1 4 0.250000 0.111111 25#5 c 2.0 1 1 1.000000 0.111111 26#6 d 0.0 1 1 1.000000 0.111111 27#7 e 1.0 2 3 0.666667 0.222222 28#8 e 2.0 1 3 0.333333 0.111111

投稿2020/12/13 03:01

meg_

総合スコア10739

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

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

samankoar

2020/12/13 12:44 編集

@meg_ さん、ありがとうございました。大変勉強になりました。別の方からこの方法も教えもらいましたのでシェアします。短いですが、その中からデータを絞って取り出せなかった欠点がありました grouped=volcano_data.groupby('Volcano Name')['VEI'].apply(pd.Series.value_counts, {'normalize':True})*100
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問