2017-08-03 249 views
0

我有一個(可能)很容易的問題。我有以下DataFrame:Python Pandas Dataframe複製並重新排序列

c1 | c2 | c3

a | b | 4
b | a | 1

現在,第3列僅依賴於第1列,第2列與第1列有相同的項目,但順序不同。我所要做的就是添加一個column4,其值與column3相同,但是按照column2的順序。所以結果如下所示:

c1| c2| c3|c4 

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

您有什麼想法嗎?

在此先感謝!

+0

'column3的相同值,但按列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 

如果不是,它是有點complicted,因爲需要對cumcount創造獨特MultiIndex然後reindex

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 
相關問題