按照另一列

时间:2016-05-24 15:27:58

标签: python pandas

我在pandas中有一个数据框

import pandas as pd

df=pd.DataFrame.from_dict({'col1':['A_2','A_1','A_3','A_4','A_6','A_5','A_8','A_7'],
'col2':['NaN','A_2','A_3','A_4','A_5','NaN','A_1','A_6']}, orient='index').T

我想更改第二列col2的顺序并更改它,以便两列中相同的项目匹配如下:

       col1     col2
   0    A_2     A_2
   1    A_1     A_1
   2    A_3     A_3
   3    A_4     A_4
   4    A_6     A_6
   5    A_5     A_5
   6    A_7     NaN
   7    A_8     NaN

尝试:df.iloc[:,1].sort_values(df.iloc[:,0])只返回有关不可用系列

的错误消息

现在假设有两个数据帧:

df1:

df1=pd.DataFrame({'col1':['A_2','A_1','A_3','A_4','A_6','A_5','A_8','A_7'],
'col2':[0,1,1,0,0,1,1,0], 'col3':[1,6,7,5,4,3,9,8]})

df2=pd.DataFrame({'N1':['NaN','A_2','A_3','A_4','A_5','NaN','A_1','A_6'],
             'N2':['NaN',0,1,2,3,'NaN',0,1], 'N3':['NaN',0,0,0,0,'NaN',0,0]})

我希望排序如上,但这一次,df2中的所有列和行:

输出:

N1    N2    N3
A_2   0     0
A_1   0     0
A_3   1     0
A_4   2     0
A_6   1     0
A_5   3     0
NaN   NaN   NaN
NaN   NaN   NaN

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以使用20130901 20121001 20131101 中的值col2重写col1

col2

结果:

df.col2 = df.col1[df.col1.isin(df.col2)]

修改:包含两个数据框的扩展问题

这隐含地假设df Out[13]: col2 col1 0 A_2 A_2 1 A_1 A_1 2 A_3 A_3 3 A_4 A_4 4 A_6 A_6 5 A_5 A_5 6 NaN A_8 7 NaN A_7 中的值是唯一的(df2.N1值除外)。因此,我们可以将它们用作索引,以从NaNN2获取相应的值。然后我们可以使用N3作为索引值:

df1.col1

您始终可以添加In[53] : df2.set_index('N1', drop=False).loc[df1.col1] Out[53]: N1 N2 N3 N1 A_2 A_2 0 0 A_1 A_1 0 0 A_3 A_3 1 0 A_4 A_4 2 0 A_6 A_6 1 0 A_5 A_5 3 0 A_8 NaN NaN NaN A_7 NaN NaN NaN 来重置索引。