2017-08-03 63 views
0

私はおそらくかなり簡単な問題があります。私は次のDataFrameを持っています:Python Pandas Dataframeは、列の複製と並べ替えを行います。

c1 | c2 | c3

a | b | 4
b | | 1

ここで、column3はcolumn1のみに依存し、column2はcolumn1と同じ項目を持ちますが、順序は異なります。私がしようとしているのは、column4と同じ値をcolumn4に追加することですが、column2の順番で追加します。結果は次のようになります:

c1| c2| c3|c4 

a | b | 4 | 1    
b | a | 1 | 4 

あなたはアイデアがありますか?

ありがとうございます!

+0

'カラム3の同じ値ですがカラム2の順番どんなdあなたはここで列2の順序を意味します。列2でソートされていますか? –

答えて

3

値が一意である場合:

df['c4'] = df.set_index('c1').loc[df['c2'], 'c3'].values 
print (df) 
    c1 c2 c3 c4 
0 a b 4 1 
1 b a 1 4 

ない場合は必要cumcountためMultiIndexユニーク、その後reindexを作成するので、それは、少しcomplictedです:

print (df) 
    c1 c2 c3 
0 a b 5 
1 a a 4 
2 b a 1 

a = df.groupby('c1').cumcount() 
idx = pd.MultiIndex.from_arrays([df.groupby('c2').cumcount(), df['c2']]) 
print (idx) 
MultiIndex(levels=[[0, 1], ['a', 'b']], 
      labels=[[0, 0, 1], [1, 0, 0]], 
      names=[None, 'c2']) 

df['c4'] = df.set_index([a,'c1']).reindex(idx)['c3'].values 
print (df) 
    c1 c2 c3 c4 
0 a b 5 1 
1 a a 4 5 
2 b a 1 4 
+0

どのようにこれらの質問にいつも素早く答えますか?あなたは決して眠れない? –

+2

ここは12:44ですので、私は夜に寝ます:) – jezrael

+1

クールな男。私は巨大なファンです。パンダの質問が来るたびに、データフレームをコピーするまでに答えがあります。:) –

0

ない@jezraelの答えのように素敵なしかし、動作します:

df['c4'] = df.apply(lambda x: dict(zip(df['c1'], df['c3'])).get(x['c2']), axis=1) 

    c1 c2 c3 c4 
0 a b 4 1 
1 b a 1 4 
関連する問題