我有一个(可能)很容易的问题。我有以下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
你有什么想法吗?
提前致谢!
答案 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