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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

pandas

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

Q&A

1回答

702閲覧

同じIDに同じ数字を繰り返し格納したい

ttt_

総合スコア6

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

pandas

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

0グッド

0クリップ

投稿2020/10/29 16:08

編集2020/10/30 03:33

ID(A01,A02...A53,B01,B02...B47,C01...C50)が振られたデータがあり、各IDは300~365日の1日ごとのデータが格納されています。各IDは特徴「P」(1~5)を持つのですが、このデータを下図のようにIDごとに全日に繰り返し代入したいです。

理想

IDDATEP
A14/13
A14/23
A14/33
A14/43
A14/53
A14/63
:::
A112/313
A24/15
A24/25
A24/35
A24/45
A24/55
A24/65
:::
A212/315
:::
C5012/304
C5012/314

試したコード

python

1for i in range(len(quest_df)): 2 for m in range(len(ele_df)): 3 if ele_df['ID'].iloc[m] == quest_df['ID'].iloc[i]: 4 ele_df['P'].iloc[m] = quest_df['P'].iloc[i]

quest_df, ele_dfはデータフレームでquest_dfにある「P」をele_dfに新たに「P」列を作り、格納しようとしました。
その際、if文により同じIDか判別し、同IDの場合のみ日付分繰り返し代入しようとしました。
しかし、結果は全て3になり上手くいきません。
どなたか解決できる方お教えください。
長文になり、失礼いたしました。

quest_df

IDP
A13
A25
A32
A43
::
A531
B13
B23
::
B472
C11
C21
::
C504

len(quest_df['No']) = 150

ele_df

IDDATE列1
A14/1
A14/2
A14/3
A14/4
A14/5
A14/6
:::
A112/31
:::
A5312/31
B14/1
:::
B4712/31

len(ele_df['No']) = 133211

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

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

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

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

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

dodox86

2020/10/29 16:53

Pythonのご質問ではありますが、データフレーム、iloc[]が出てくるあたり、pandas利用縛りがあると思います。そうであればその旨を記述し、タグには"pandas"もあるので、追加しておいた方が良いと思います
ttt_

2020/10/30 03:32

教えてくださりありがとうございます。 'pandas'を追加いたしました。
guest

回答1

0

Python勉強中の者です。他の方がご指摘しているようにpandas利用だと思われますのでその前提で。

まず想定されているデータをpandas.DataFrameとして作成しました。(すべてstring型です)

次にele_dfにP列を追加作成しました(string型で初期値は''です。)

そして試されているコードを貼り付けて処理を行った結果、「理想」通りの出力結果を得ました。

結果が全て3とのことですが、
おそらくquest_df, ele_dfのデータ内容に問題があるか、
ここに書かれていない部分の処理に問題があると思われます。

quest_dfの"ID"とele_dfの"ID"とで、(データの型や桁数、形式など)が全て一致しているか
quest_dfの"ID"に重複がないか、などご確認ください。

なお、pandasについては知識ゼロで先ほど調べましたが、このようなコードを書かなくても
データを連結するようなメソッドも用意されていると思われます。

# coding: utf-8 import pandas as pd quest_df = pd.DataFrame({'ID':['A01', 'A02', 'B01', 'B02', 'B03', 'C01', 'C02'], 'P':['3', '5', '2', '1', '4', '2', '4']}) ele_df = pd.DataFrame({'ID':['A01', 'A01', 'A01', 'A02', 'A02', 'A02', 'B01', 'B01', 'B01', 'B02', 'B02', 'B02', 'B03', 'B03', 'B03', 'C01', 'C01', 'C01', 'C02', 'C02', 'C02'], 'DATE':['4/1', '8/1', '12/31', '4/1', '8/1', '12/31', '4/1', '8/1', '12/31', '4/1', '8/1', '12/31', '4/1', '8/1', '12/31', '4/1', '8/1', '12/31', '4/1', '8/1', '12/31'], 'DATA':['data01', 'data02', 'data03', 'data04', 'data05', 'data06', 'data07', 'data08', 'data09', 'data10', 'data11', 'data12', 'data13', 'data14', 'data15', 'data16', 'data17', 'data18', 'data19', 'data20', 'data21']}) #ele_dfにP列を追加作成 ele_df['P'] = '' print(ele_df) for i in range(len(quest_df)): for m in range(len(ele_df)): if ele_df['ID'].iloc[m] == quest_df['ID'].iloc[i]: ele_df['P'].iloc[m] = quest_df['P'].iloc[i] print(ele_df)

出力結果

ID DATE DATA P 0 A01 4/1 data01 3 1 A01 8/1 data02 3 2 A01 12/31 data03 3 3 A02 4/1 data04 5 4 A02 8/1 data05 5 5 A02 12/31 data06 5 6 B01 4/1 data07 2 7 B01 8/1 data08 2 8 B01 12/31 data09 2 9 B02 4/1 data10 1 10 B02 8/1 data11 1 11 B02 12/31 data12 1 12 B03 4/1 data13 4 13 B03 8/1 data14 4 14 B03 12/31 data15 4 15 C01 4/1 data16 2 16 C01 8/1 data17 2 17 C01 12/31 data18 2 18 C02 4/1 data19 4 19 C02 8/1 data20 4 20 C02 12/31 data21 4

投稿2020/10/29 19:43

takamao

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問