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

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

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

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

Q&A

解決済

1回答

249閲覧

PandasのDaraframeの新規列作成について

trey_0329

総合スコア109

Python

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

0グッド

0クリップ

投稿2019/01/31 12:08

下記のようなDataFrame<図1>があるとして、
同じ表に
>Placeを基準にした、それぞれの場所の数の合計(Total counts of Place)と
>Placeを基準にした、それぞれのとPlaceを基準にした合計値Total Price
を新しいTotal counts of Place列、Total Price列を追加した<図2>を作りたいです

<図1>

PlacePrice
1Kyoto10
2Osaka25
3Kyoto30
4Tokyo17
5Kyoto10
6Tokyo2

<図2>

PlacePriceTotal counts of PlaceTotal Price
1Kyoto10350
2Osaka25125
3Kyoto30340
4Tokyo17219
5Kyoto10240
6Tokyo2b19

元コードはこちらです

B = pd.DataFrame({ 'Number':[1,2,3,4,5,6], 'Place':['Tokyo','Osaka','Kyoto','Tokyo','Kyoto','Tokyo'], 'Price':['10','25','30','17','10','2']})

自分で書いたコードはこちらになるのですが、

  1. KeyErrorが起こるのと、Priceに関してはどのように合計すればよいのかわかりません。

お手数ですが、どういう風にやる、と言う流れだけでもいいのでご協力をお願い致します。

B['Total counts of Place']=B["Place"].replace("Tokyo",B['Place'].value_counts()['Tokyo'],inplace=True) B['Total counts of Place']=B["Place"].replace("Osaka",B['Place'].value_counts()['Osaka'],inplace=True) B['Total counts of Place']=B["Place"].replace("Kyoto",B['Place'].value_counts()['Kyoto'],inplace=True) B

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

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

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

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

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

guest

回答1

0

ベストアンサー

.transformでグループ毎に集計でき、以下のように書けます。
参考:How to merge pandas value_counts() to dataframe or use it to subset a dataframe

Python

1import pandas as pd 2 3B = pd.DataFrame({ 4 'Number':[1,2,3,4,5,6], 5 'Place':['Tokyo','Osaka','Kyoto','Tokyo','Kyoto','Tokyo'], 6 'Price':['10','25','30','17','10','2']}) 7print(B) 8""" 9 Number Place Price 100 1 Tokyo 10 111 2 Osaka 25 122 3 Kyoto 30 133 4 Tokyo 17 144 5 Kyoto 10 155 6 Tokyo 2 16""" 17B['TCP'] = B.groupby('Place',as_index=False)['Place'].transform(lambda s:s.count()) 18B['TP'] = B.groupby('Place',as_index=False)['Price'].transform(lambda s:s.astype(int).sum()) 19print(B) 20""" 21 Number Place Price TCP TP 220 1 Tokyo 10 3 29 231 2 Osaka 25 1 25 242 3 Kyoto 30 2 40 253 4 Tokyo 17 3 29 264 5 Kyoto 10 2 40 275 6 Tokyo 2 3 29 28"""

投稿2019/01/31 12:43

can110

総合スコア38234

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

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

trey_0329

2019/01/31 12:59

ありがとうございます!ちょうど求めていたものがすっきり出たのでとても助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問