2017-08-03 250 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 
相关问题