前提・実現したいこと
Pandasで、データフレームに対して、if文、for文を適用させて、条件にあったデータを抽出し、リスト化したいです。
###実現したいこと
赤線で引いたように、条件に合ったDay1のデータを抽出したいです。
ー以下条件ー
同じaddress内において、IDが異なった時のDay1を抽出する。
例)address:1番地の12
IDが2→5に変わった時のDay1である、1998-07-01 を抽出したい。
###完成イメージ
上のデータフレームでは、赤線を引いた、
「1998-07-01, 1990-01-01, 1995-04-01, 2000-05-01」を抽出できれば成功です。
それぞれ、同じaddress内で、IDが異なった時のDay1を抽出しています。
発生している問題・エラーメッセージ
File "<ipython-input-14-e384cf791d5d>", line 9 list1.append(df["Day1"][k+1]) #[k+1]行目のDay①のデータを、list1に格納する ^ SyntaxError: invalid character in identifier
該当のソースコード
実際はもっと量の多いデータになっているのですが、ここでは簡単なデータフレームを作成しました。
df = pd.DataFrame([[1,'1990-04-01', '2009-11-01', '1番地の11'], [1,'1990-04-01', '2009-11-01', '1番地の11'], [1,'1990-04-01', '2009-11-01', '1番地の11'], [1,'1990-04-01','', '1番地の11'], [2,'1990-06-01', '1997-11-01', '1番地の12'], [2,'1990-06-01', '1995-11-01', '1番地の12'], [5,'1998-07-01', '', '1番地の12'], [5,'1998-07-01', '', '1番地の12'], [5,'1998-07-01', '', '1番地の12'], [8,'2000-08-01', '', '1番地の18'], [8,'2000-08-01', '', '1番地の18'], [8,'2000-08-01', '', '1番地の18'], [19,'1986-09-01', '1988-10-01', '1番地の25'], [19,'1986-09-01', '1988-10-01', '1番地の25'], [30,'1990-01-01', '1992-11-01', '1番地の25'], [30,'1990-01-01', '1992-11-01', '1番地の25'], [45,'1995-04-01', '1998-03-01', '1番地の25'], [45,'1995-04-01', '1998-03-01', '1番地の25'], [60,'2000-05-01', '', '1番地の25']], columns = ['ID','Day1','Day2','address']) df
list1 = [] for i in df.iterrows(): for j in df.iterrows(): for k in df.iterrows(): if(df["address"][i] == df["address"][i+1]): #addressが前の行と一致する場合下の行へ if(df["ID"][j] == df["ID"][j+1]): #IDが前の行と一致する場合下の行へ if(df["ID"][j] != df["ID"][j+1]): #IDが前の行と一致しない場合 list1.append(df["Day1"][k+1]) #[k+1]行目のDay①のデータを、list1に格納する print(list1)
試したこと
if文やfor文を使ってみたり、変数を増やしてみたりしたのですが、全然できませんでした。
初心者で試したことも少ないのですが、よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 10:39