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

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

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

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

Q&A

解決済

1回答

1131閲覧

pythonのdataframeの値を条件で他の列から同じ代入

pythondata

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/09/30 20:42

前提・実現したいこと

pythonのdataframeの値を条件で他の列から代入したい

該当のソースコード

G 背 力 体力
1 1 555 0
1 2 666 0
1 3 444 0
1 4 333 0
1 5 222 0
2 1 111 0
2 2 555 0
2 3 666 0
2 4 777 0
2 5 222 0
3 1 111 0
3 2 333 0
3 3 222 0
3 4 111 0
3 5 555 0
4 1 666 0
4 2 777 0
4 3 222 0
4 4 111 0
4 5 333 0
みたいなpythonのdataframeでGごとに同じ力を入れたいです。
背が2の力を体力に入れるみたいな。
つまり2を指定したら、こうなるように
G 背 力 体力
1 1 555 666
1 2 666 666
1 3 444 666
1 4 333 666
1 5 222 666
2 1 111 555
2 2 555 555
2 3 666 555
2 4 777 555
2 5 222 555
3 1 456 333
3 2 333 333
3 3 222 333
3 4 111 333
3 5 555 333
4 1 666 777
4 2 777 777
4 3 222 777
4 4 111 777
4 5 333 777
groupbyを使えばいいのか色々考えましたが、分かりませんでした。
Gはindexでもそうじゃなくても、
体力は既存の列でも、新たに列を作ってもいいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Python

1import pandas as pd 2import io 3 4txt = """ 5G,背,力,体力 61,1,555,0 71,2,666,0 81,3,444,0 91,4,333,0 101,5,222,0 112,1,111,0 122,2,555,0 132,3,666,0 142,4,777,0 152,5,222,0 163,1,111,0 173,2,333,0 183,3,222,0 193,4,111,0 203,5,555,0 214,1,666,0 224,2,777,0 234,3,222,0 244,4,111,0 254,5,333,0 26""" 27 28df = pd.read_csv(io.StringIO(txt)) 29# print(df) 30 31dic = df.loc[df['背'] == 2, ['G', '力']].set_index('G')['力'].to_dict() 32# print(dic) 33 34for _, s in df.iterrows(): 35 s['体力'] = dic[s['G']] if s['G'] in dic else None 36 37print(df)

result

1 G 背 力 体力 20 1 1 555 666 31 1 2 666 666 42 1 3 444 666 53 1 4 333 666 64 1 5 222 666 75 2 1 111 555 86 2 2 555 555 97 2 3 666 555 108 2 4 777 555 119 2 5 222 555 1210 3 1 111 333 1311 3 2 333 333 1412 3 3 222 333 1513 3 4 111 333 1614 3 5 555 333 1715 4 1 666 777 1816 4 2 777 777 1917 4 3 222 777 2018 4 4 111 777 2119 4 5 333 777

投稿2020/10/01 00:45

Daregada

総合スコア11990

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

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

pythondata

2020/10/01 01:03

ありがとうございます。自分には複雑すぎて答え導くのが無理でした
Daregada

2020/10/01 01:07

解決方法は何通りもあるので、効率を気にせず自分でわかる方法を使えばいいと思います。
pythondata

2020/10/01 01:11

はい。そうですね。何行にもなっちゃうところでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問