2016-09-16 20 views
2

私は日付、IDを持つデータフレームを持っています - 私はそれぞれの日付とIDの組み合わせを取り出し、新しいデータフレームを作成する必要があります。すべてのペアの2つのリストのPython forループ

date   id 
2016-05-13  abc 
2016-05-13  pqr 
2016-05-14  abc 
2016-05-14  pqr 

ids = list(sorted(set(df['id']))) 
Out: ['abc','pqr'] 

dates = list(sorted(set(df[df.id == ids[i]]['date']))) 
Out: ['2016-05-13','2016-05-14'] 

for i in range(0,len(ids)): 
    df2 = df[(df.date == dates[i]) & (df.id == id[i])] 

上記のコードは、相対インデックス値のみ(最初の日付、最初のID &第二日、第2のID)に対する出力(df2)を得ているが、私はすべてのペアについての出力を必要とします。ループで何を変えるべきか教えてください。

答えて

-2

すべてのペアにidsdatesを取得するには、列の各idと行の各dateを持つ新しいデータフレームを作成しますitertools

として
import itertools 

for iid, ddate in itertools.product(ids, dates): 
    df2 = df[(df.date == ddate) & (df.id == iid)] 
+0

itertoolsのリストが必要な場合は


enter image description here

pd.DataFrame([], set(df.date), set(df.id)) 
は罰金の答えですが、このスニペットでも動作しません。 'df'のスライスを同じ変数' df2'に何度も何度も繰り返し割り当てます。 – piRSquared

+0

@ piRSquared私が理解したところから、OPはおそらくさらなる処理の対象となるid/dateスライスの各ペアに対してそのようなスライスを生成したかったのです... – ewcz

0

を使用することができます。あなたは後でそれを記入することができます。あなただけの組み合わせ

pd.MultiIndex.from_product([set(df.id), set(df.date)]).tolist() 

[('pqr', '2016-05-14'), 
('pqr', '2016-05-13'), 
('abc', '2016-05-14'), 
('abc', '2016-05-13')] 
関連する問題