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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

Q&A

解決済

1回答

439閲覧

【python】同じ日付と名前(条件にあったグループ)から最小値を求め置換したい

sagiyama

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

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

0グッド

0クリップ

投稿2022/05/08 23:36

pythonのデータ整形についての質問です。

日付名前価格
4/1A300
4/1A200
4/2B200
4/3B200
4/3B100

↓ データ整形後

日付名前価格
4/1A200
4/1A200
4/2B200
4/3B100
4/3B100

上記のように、同じ日付と名前の中で一番小さい価格に置換させたいと考えております。

(あるいは、

日付名前価格価格2
4/1A300200
4/1A200200

新規に価格2列を作成し値を反映。)

pandasのメソッド「groupby」を使用して、最小値を求めた表は作成できるのですが、
そこから変数に入れるとしても、一つずつ置換する方法がわかりません。
または、「greoupdy」を使用せず「for」と「if」を使用して置換していく方が良いのでしょうか。

他に方法等ございましたら、ご教示いただけますと幸いです。
何卒、宜しくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6csv_data = ''' 7日付,名前,価格 84/1,A,300 94/1,A,200 104/2,B,200 114/3,B,200 124/3,B,100 13''' 14df = pd.read_csv(io.StringIO(csv_data)) 15 16# 17dfx = ( 18 df.groupby('名前', sort=False) 19 .apply(lambda x: x.assign(価格=x['価格'].min()))) 20 21print(dfx.to_markdown(index=False))
日付名前価格
4/1A200
4/1A200
4/2B100
4/3B100
4/3B100

投稿2022/05/09 00:32

編集2022/05/09 02:49
melian

総合スコア19771

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

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

sagiyama

2022/05/09 01:12

早速のご回答ありがとうございます。 思い通りに動作いたしました。 このようなコードや、メッソド等はどのように学ばれたのでしょうか? (本、公式ページ、経験etc……) 差し支えなければ、お教えいただけますでしょか。
melian

2022/05/09 01:20

この Teratail で様々な質問に回答していく間に学んだのです。API は公式ページで調べて、アルゴリズムなどは StackOverFlow で検索しています。
sagiyama

2022/05/09 01:48

お返事ありがとうございます。 質問に回答することで学ぶ発想はなかったです。 「StackOverFlow」についても知らなかったです。 検索してみます。 お忙しい中、誠にありがとうございました。
melian

2022/05/09 02:50

すみません、もっと簡単な方法がありましたので回答を更新しました。
sagiyama

2022/05/09 07:44 編集

確認いたしました。 何度もありがとうございます。 参考にいたします。 【追記】 質問内容の表に列が増えた場合、(例えば、価格2とし数値が入力されている) 増えた価格2列も価格列と同様の処理がされてしまいます。 複数条件でグループ化を行い、価格列のみを処理させようしたところエラーが発生いたしました。 該当コードは以下になります。 __________________________________________ dfx=(df[['日付','名前']].groupby(['日付','名前']).apply(lambda x:x.sort_values(['価格']).cummin().sort_values(['日付'])).reset_index(drop=True)) _________________________________________ 指定の列のみに反映させる方法はございますでしょうか。 度重なる質問で大変恐縮ではございますが、ご面倒でなければ、ご教示お願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問