nanimo_wakaranai
@nanimo_wakaranai

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pandas DataFrame での値の抽出方法

解決したいこと

pandas DataFrame での値の抽出方法を教えていただきたいです。
(超初心者です。仕事に必要で困っています:sob:。)

以下に詳細を記します。

該当するソースコード

以下のようなDataFrameがあったとして、
各行に対して、
「v2の値と同じ値がV1に入っている行を抽出し、
 それらのV3の最大値を求め、V4に入力する」
というコードの書き方を教えていただきたいです。

今回の場合、
AのV2 の値はbなので、
bをV1列に持つ、D,E,Fが抽出されます。
DEFのV3 の最大値は5なので、
V4列には5が入力されます。
B、Cも同じ要領で5が入力されます。

Name v1 v2 V3 V4 
A    a   b  2  5
B    a   b  3   5
C    a   b  7   5
D    b   c  5
E    b   c  4
F    b   c  3

よろしくお願いいたします。

0

2Answer

このような形はいかがでしょうか?

df['v4'] = df['v2'].apply(lambda x: df[df['v1'] == x]['v3'].max())

image.png

2Like

Comments

  1. YottyPG さん

    ご回答いただきましてありがとうございました!
    自身のデータで試したところ、目的の最大値列を追加することができました。
    本当に助かりました!!ありがとうございました(>_<)

.apply()メソッドは非常に遅いので、なるべく使わないことを推奨します。

以下のように、groupby.map()メソッドを組み合わせて使うことで高速に処理できます。

df['v4'] = df['v2'].map(df.groupby('v1')['v3'].max())
1Like

Your answer might help someone💌