2016-05-12 12 views
0

いただきました最も簡単な方法を作成しますと新しい参照データフレームにこの(データフレーム)から行くの

referenceID value1 values2 
    1    100 200 
    1    500 400 
    2    100 200 
    2    300 400 

と第二のデータフレーム:

referenceID Project Folder Owner 
1    A  B  C 
2    D  E  F 
これに

Project Folder Owner value1 values2 
    A  B  C  100 200 
    A  B  C  500 400 
    D  E  F  100 200 
    D  E  F  300 400 

私はラベルエンコーダを使用していますが、それは新しいフィールドに "Project、Folder and Owner"を連結する必要があります。私は音源を維持するが、余分な不必要な作業のように思える。

答えて

0

プロジェクト、フォルダ、および所有者を使用して、オリジナルのgroupbyで2番目のデータフレームを作成できます。次に、インデックスの一意の値のリストを作成し、それらを新しいデータフレームに送ります。あなたの元のデータがDFという名前のデータフレームであると仮定すると:

df2 = df.groupby(['Project', 'Folder', 'Owner']).agg('sum') 
df3 = pd.DataFrame([list(df2.index.unique().tolist()[x]) for x in range(len(df2.index.unique().tolist()))], columns=df2.index.name) 
df3.insert(0, 'ReferenceId', df3.index + 1) 

結果は次のように(自分の所望の第二のデータフレーム)になります

ReferenceId Project Folder Owner 
0 1   A  B  C 
1 2   D  E  F 
0

これは、あなたが探しているの出力を生成します。あなたの列を選択するために

m = [['A', 'B', 'C', 100, 200], 
    ['A', 'B', 'C', 500, 400], 
    ['D', 'E', 'F', 100, 200], 
    ['D', 'E', 'F', 300, 400]] 

owner = {} 
for row in m: 
    key = tuple(row[:3]) 
    if key in owner: 
     owner[key].append(row[3:]) 
    else: 
     owner[key] = [row[3:]] 

frame1 = [] 
frame2 = [] 
for i, key in enumerate(owner): 
    frame2.append([i] + list(key)) 
    for row in owner[key]: 
     frame1.append([i] + list(row)) 


print frame1 
print frame2 
+0

パンダを使用すると、より効率的で可読性が向上します – ysearka

+0

私は同意します。しかし、ユーザーはパンダに精通していると仮定しています。私の解決策は、標準ライブラリのみに依存します。 – jgrant

+0

ええ私は質問のデータフレームを述べた。私はあなたに投票していませんでした – Diego

-1

、あなたは列の番号を知っていれば、内蔵のコールを使用し、otherway使用.ix方法:GROUPBY用として

%timeit df.loc[:,['value1','values2']] 
out: 1000 loops, best of 3: 602 µs per loop 

%timeit df[[3,4]] 
out: 1000 loops, best of 3: 295 µs per loop 

%timeit df.ix[:,['value1','values2']] 
1000 loops, best of 3: 412 µs per loop 

、よくちょうど使用groupby:

df.groupby(['Project','Folder','Owner'],as_index = False).sum().drop(['value1','values2'],1) 
+0

どこreferenceIDですか?元のデータフレームをどのように更新するのですか? – Diego

関連する問題