Python Pandas Dataframe复制并重新排序列

时间:2017-08-03 10:39:05

标签: python pandas dataframe

我有一个(可能)很容易的问题。我有以下DataFrame:

c1 | c2 | C3

a | b | 4
   b | a | 1

现在column3仅依赖于column1,而column2与column1具有相同的项目,但顺序不同。我想要做的就是添加一个column4,它具有相同的column3值但是按column2的顺序排列。所以结果看起来像这样:

c1| c2| c3|c4

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

你有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分: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

如果没有,则有点复杂,因为创建唯一MultiIndex然后cumcount需要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

答案 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