daisukemaki1003
@daisukemaki1003

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python dataframeに条件指定で値を追加したい

解決したいこと

複数条件指定を簡潔に書きたい

 columnがimage_id, labelのDataframe

df =
(index),  image_id,   label
0    1000015157.jpg  0
1    1000201771.jpg  3
2    1000421181.jpg  1
3    1000723321.jpg  4
4    1000812911.jpg  3
... ...
21397 rows × 2 columns

df_ illness =
0  Cassava Bacterial Blight (CBB)
1  Cassava Brown Streak Disease (CBSD)
2  Cassava Green Mottle (CGM)
3  Cassava Mosaic Disease (CMD)
4  Healthy

dfのcolumnのlabel 1~4 の整数に対して一致する値で構成した列を追加したいです。

目指す形
(index),  image_id,   label,   state
0   1000015157.jpg  0   Cassava Bacterial Blight (CBB)
1  1000201771.jpg   3   Cassava Mosaic Disease (CMD)
2  1000421181.jpg   1    Cassava Brown Streak Disease (CBSD)
3  1000723321.jpg   4    Healthy
4  1000812911.jpg   3    Cassava Mosaic Disease (CMD)

下記で実装可能とは思うのですが、より簡潔にかける方法を教えていただきたいです。

for i in df_ illness.index:
  if df['label'] == i:
   df['state'] = df_illness.iloc[i]

0

1Answer

ループ処理でなく、mergeで結合してはどうですか。

df['label'] = df['label'].astype(int)
df_illness['index'] = df_illness.index
df.merge(df_illness, left_on='label', right_on='index', how='left')

    image_id    label   state   index
0   1000015157.jpg  0   Cassava Bacterial Blight (CBB)  0
1   1000201771.jpg  3   Cassava Mosaic Disease (CMD)    3
2   1000421181.jpg  1   Cassava Brown Streak Disease (CBSD)     1
3   1000723321.jpg  4   Healthy     4
4   1000812911.jpg  3   Cassava Mosaic Disease (CMD)    3
0Like

Comments

Your answer might help someone💌