2016-08-09 124 views
0

我有一个缺少值的系列数据集,我想用索引来替换。第二列包含与第一列相同的编号,但顺序不同。在熊猫中排列多个列

这里有一个例子:

>>> df 
ind u v d 
0  5 7 151 
1  7 20 151 
2  8 40 151 
3  20 5 151 

这应该变成:

>>>df['new_index'] = range(1, len(numbers) + 1) 

>>>df 
ind u v d 
0  1 2 151 
1  2 4 151 
2  3 5 151 
3  4 1 151 

我通过创建一个新的列进行索引行 'U' 值但我现在如何替换引用索引的第二列的值?

感谢您的任何建议!

+0

“的第二列包含的数字与第一列相同,但顺序不同。“在你的例子中似乎不是这样。 –

+0

@ Ami:真的,它包含相同的数字,也可能包含一些更多/更少的数字。数字也可能在一个柱子中出现多次。 – Ernie

+0

“它包含相同的数字,也可能包含一些更多/更少的数字”这种呈现“包含与第一列相同的数字”毫无意义。 –

回答

1

您可以使用Series.rank,但首先需要创建Seriesunstack和持续重新创建DataFrameunstack

df[['u','v']] = df[['u','v']].unstack().rank(method='dense').astype(int).unstack(0) 
print (df) 
    u v d 
ind   
0 1 2 151 
1 2 4 151 
2 3 5 151 
3 4 1 151 

如果只使用DataFrame.rank,在v输出不同的是:

df[['u','v']] = df[['u','v']].rank(method='dense').astype(int) 
print (df) 
    u v d 
ind   
0 1 2 151 
1 2 3 151 
2 3 4 151 
3 4 1 151 
+0

不错谢谢!这无疑是我一直在寻找的! – Ernie